【发布时间】:2020-05-25 02:22:35
【问题描述】:
我试图从下图中抓取“95% 喜欢这部电影”,但是当我通过类指定标签时没有得到任何结果 - 查看下面的代码。关于如何实现这一点的任何想法?
import bs4, requests
from bs4 import BeautifulSoup
res = requests.get('https://www.google.com/search?rlz=1C5CHFA_enUS879US879&sxsrf=ALeKk00cw9xBpC8OWgCnKhMSIGOi4xb3sw%3A1590372307467&ei=0yfLXrSQHNHa9AOzh6jIAg&q=titanic+google+play&oq=Titanic+&gs_lcp=CgZwc3ktYWIQAxgAMgQIIxAnMgoIABCDARAUEIcCMgcIABCDARBDMgUIABCRAjIFCAAQkQIyBwgAEIMBEEMyBAgAEEMyBwgAEIMBEEMyBAgAEEMyBAgAEEM6BAgAEEc6AggAOgUIABCDAVCcLFjMOmCEQ2gBcAN4AIABbIgBigaSAQM4LjGYAQCgAQGqAQdnd3Mtd2l6&sclient=psy-ab')
res.raise_for_status()
soup = bs4.BeautifulSoup(res.text, 'html.parser')
news = [p.text.strip() for p in soup.select('h1 ~ p') if p.find('font')]
soup = BeautifulSoup(res.content, 'html.parser')
content = BeautifulSoup(res.content, 'html.parser')
content.find_all(class="srBp4.Vrkhme")`
]1
【问题讨论】:
-
Google 通常使用 JavaScript 来显示元素,但
BeautifulSoup无法运行 JavaScript。关闭浏览器中的 JavaScript 并使用 Google 重新加载您的页面,您将看到BeautifulSoup可以看到的内容。我记得当客户端无法运行 JavaScript 时,Google 会发送不同的HTML。 -
顺便说一句:您还可以保存通过 BS 获得的 HTML 并在浏览器中显示,以查看您是否没有收到机器人警告或阻止机器人的 recaptcha。谷歌不喜欢脚本/机器人,它有很多钱来创建复杂的系统来阻止机器人。它还有不同的 API 来提供一些数据,而不是从 HTML 中获取数据
-
@furas 谢谢 - 我找不到获取此数据的 API。
-
@furas 获得所有这些数据真是太好了
-
在网络浏览器中关闭 JavaScript 并重新加载页面以查看
BeautifulSoup可以从 Google 获得什么 - 然后获取select()、find()的值。顺便说一句:当我使用您的 URL 时,我不会获得有关电影的信息 - Google 可能会为不同的用户发送不同的结果。当您测试 Google 结果时,您可能必须在网络浏览器中使用隐私模式,因为您的脚本类似于隐私模式。 Google 也可能会为不同的设备(手机、平板电脑、台式机)发送不同的 HTML,这取决于您在requests中不使用的标题User-Agent。也许将res.text保存在文件中并在浏览器中打开它
标签: python web-scraping beautifulsoup