使用 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 的网页