python - 使用 BeautifulSoup 和 Python 在 YouTube 上查找链接
问题描述
我正在使用 Beautiful Soup 在 YouTube 上进行网页抓取。我的目标是从 YouTube 搜索页面中找到所有视频链接:
response = urllib.request.urlopen("https://www.youtube.com/results?search_query=stfu")
soup = BeautifulSoup(response, "html.parser")
我正在寻找这个元素:
<a id="video-title" class="yt-simple-endpoint style-scope
ytd-video-renderer" title="PINK GUY - STFU"
href="/watch?v=OLpeX4RRo28" ...
我搜索了所有的“a”标签元素,但我只得到了一些:
for a in soup.findAll('a'):
print(a)
结果链接似乎来自“帮助”部分或类似内容,而不是正文:
<a href="https://www.youtube.com/about/" slot="guide-links-primary" style="display: none;">Información</a>
<a href="https://www.youtube.com/about/press/" slot="guide-links-primary" style="display: none;">Prensa</a>
<a href="https://www.youtube.com/about/copyright/" slot="guide-links-primary" style="display: none;">Derechos de autor</a>
<a href="/t/contact_us" slot="guide-links-primary" style="display: none;">Contacto</a>
<a href="https://www.youtube.com/creators/" slot="guide-links-primary" style="display: none;">Creadores</a>
当我打印所有的汤对象以检查响应时,我注意到视频信息应该是空的地方:
<div class="video-skeleton">
<div class="video-details">
<div class="thumbnail skeleton-bg-color"></div>
<div class="details flex-1">
<div class="video-title text-shell skeleton-bg-color"></div>
<div class="video-meta text-shell skeleton-bg-color"></div>
这是我的链接应该在的地方,但里面什么都没有。
感谢您的帮助!
解决方案
那是因为您正在发出HTTP
请求,而 youtube 使用JavaScript
. 为了能够解析JS
内容,您必须使用支持发出请求然后用 JS 渲染它的库。
推荐阅读
- html - 如何更改 mat-button 字体颜色
- angular - 如何在 Visual Studio 2019 中为新的 Angular 应用添加和更新 npm 包
- python - 重定向python版本输出
- ruby-on-rails - 从工人内部的班级更新工人的状态
- r - 与运行块相比,Knit 无法正常工作
- python - 如何在 Python 中创建滚动记录器
- sql-server - SQL Server 加入多个 CTE
- java - 一个数据库可被多台机器编辑
- python - 为什么我不能使用步骤更改 Python 列表中的项目?
- jquery - 解析jquery自动完成多维json数据