使用 BeautifulSoup 进行网页抓取(Google)[重复]

Posted

技术标签:

【中文标题】使用 BeautifulSoup 进行网页抓取(Google)[重复]【英文标题】:Web scraping (Google) using BeautifulSoup [duplicate] 【发布时间】:2018-09-08 04:37:14 【问题描述】:

如果我用谷歌搜索 How old is Messi,它应该给我输出:30,但它会回答我 None。 我正在使用 Python 3。

import time
from bs4 import BeautifulSoup
import requests
search=input("What do you want to ask: ")
search=search.replace(" ","+")
link="https://www.google.com/search?q="+search
print(link)
source=requests.get(link).text

soup=BeautifulSoup(source,"html.parser")
print(soup.prettify())
answer=soup.find('div',class_="Z0LcW")
print(answer.text)

【问题讨论】:

@vadimKotov 我的答案在“div”下,类别为“Z0LcW” 【参考方案1】:

首先你的soup.find 是错误的,你必须这样answer=soup.find('div','class':'Z0LcW') 最有可能的问题是您需要一些东西来加载 JS 数据。 你可以使用 selenium + ChromeDriver

import selenium
from selenium import webdriver
driver = webdriver.Chrome()
import time
from bs4 import BeautifulSoup
import requests

search=input("What do you want to ask: ")
search=search.replace(" ","+")
link="https://www.google.com/search?q="+search
driver.get(link)
time.sleep(2)
driver.implicitly_wait(5)
html = driver.page_source
soup=BeautifulSoup(html, "html.parser")
print(soup.prettify())
answer=soup.find('div','class':"Z0LcW")
print(answer.text)

希望这会有所帮助。 P.S:建议关注PEP-8 style guide

【讨论】:

他的 HTML 与谷歌不同,因为没有用户代理。你的回答不相关 为什么他的soup.find【参考方案2】:

您必须添加用户代理才能伪造真实的浏览器访问:

headers = 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'
source=requests.get(link, headers=headers).text
soup=BeautifulSoup(source,"html.parser")

刚刚试了一下,效果不错。 请参阅this answer 了解更多信息。

【讨论】:

以上是关于使用 BeautifulSoup 进行网页抓取(Google)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

用于网页抓取的 Selenium 与 BeautifulSoup

使用 BeautifulSoup 抓取包含 JavaScript 的网页

是否可以用beautifulsoup 抓取“动态网页”?

使用 BeautifulSoup抓取网页信息信息

使用python和beautifulsoup4抓取网页后重复数据

Python:使用 BeautifulSoup 库抓取百度天气