首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python: Beautifulsoup返回None或[]

Python: Beautifulsoup返回None或[]
EN

Stack Overflow用户
提问于 2018-12-31 03:47:24
回答 3查看 588关注 0票数 3

您好,我正在练习我的请求和网络抓取技能,所以我试图抓取youtube上的热门页面,并拉出热门视频的标题,这是这个链接youtube

这是我正在运行的代码

代码语言:javascript
运行
复制
import requests
from bs4 import BeautifulSoup

url = 'https://www.youtube.com/feed/trending'
html = requests.get(url)
soup = BeautifulSoup(html.content, "html.parser")
a = soup.find_all("a", {"id": "video-title"})
print(a)
EN

回答 3

Stack Overflow用户

发布于 2018-12-31 03:51:55

打印变量html.content的内容-它是否包含该ID?

我打赌不会,youtube.com是一个严重依赖javascript的网站,但是requests模块没有js引擎。你的浏览器看到的通常不是像requests这样的模块看到的。

票数 2
EN

Stack Overflow用户

发布于 2018-12-31 03:57:38

你可能需要selenium这样的方法,让页面有足够的时间完全渲染。以下是目前产生的70个标题。

代码语言:javascript
运行
复制
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

url = 'https://www.youtube.com/feed/trending'

d = webdriver.Chrome()
d.get(url)
titles = [title.text for title in WebDriverWait(d,20).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#video-title")))]
print(titles)
d.quit()
票数 2
EN

Stack Overflow用户

发布于 2018-12-31 04:04:58

网络正在退化,因为它变得越来越难以理解。在很大程度上,“现代”网页不再像用户看到的那样由服务器生成;相反,脚本的球体被发送给用户,基本上将任何¯\_(ツ)_/注入到DOM中。

这就是为什么需要在成熟的浏览器中使用Selenium绑定的原因,正如上面的QHarr所提到的。

很抱歉没有对此发表评论,但显然我需要50分才能做到这一点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53980890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档