【问题标题】:Web scraping (Google) using BeautifulSoup [duplicate]使用 BeautifulSoup 进行网页抓取(Google)[重复]
【发布时间】: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”

标签: python web-scraping beautifulsoup


【解决方案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 了解更多信息。

【讨论】:

    猜你喜欢
    • 2018-08-02
    • 1970-01-01
    • 2019-07-14
    • 2020-10-04
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多