抓取google搜索代码段结果

时间:2017-08-07 20:38:37

标签: python web-scraping

我正在尝试编写一个小程序,你输入一个搜索查询,它打开你的浏览结果,然后刮掉谷歌搜索结果并打印出来,我不知道我将如何去做刮擦部分。我到目前为止所有这一切:

import webbrowser 
query = input("What would you like to search: ")
for word in query:
    query = query + "+"
webbrowser.open("https://www.google.com/search?q="+query)

让我们说他们说:“谁是唐纳德特朗普?” 他们的浏览器将打开,这将显示: donald trump search result

我将如何进行并删除维基百科提供的摘要,然后将其打印回给用户?或者在任何情况下刮掉网站上的任何数据???

4 个答案:

答案 0 :(得分:2)

虽然有很多方法可以抓取数据,但我已经使用名为BeautifulSoup的库证明了这一点。我相信它比使用webbrowser抓取数据更灵活。不要担心这对你来说是否陌生,我会引导你完成这些步骤。

<小时/> 您需要BeautifulSouprequests个模块。如果您没有,使用pip 安装它们。
导入模块:

import requests
from bs4 import BeautifulSoup

获取用户输入并将其保存到变量:

query = input("What would you like to search: ")
query = query.replace(" ","+")
query = "https://www.google.com/search?q=" + query

使用requests模块向主机发送GET请求:

r = requests.get(query)
html_doc = r.text

实例化BeautifulSoup对象:

soup = BeautifulSoup(html_doc, 'html.parser')

最后刮掉所需的文字:

for s in soup.find_all(id="rhs_block"):
   print(s.text)

注意ID。此ID是Google放置所有代码段文本的容器。通过这种方式,它会逐字地吐出它在这个容器中找到的所有文本,但是你可以将它格式化为看起来更整洁。
顺便说一句,如果您碰巧遇到UnicodeEncodeError,则必须将.encode('utf-8')附加到每个text属性的末尾。
如果您还有其他问题,请与我们联系。干杯!

答案 1 :(得分:1)

要抓取摘要,您可以通过选择 select_one() 选择器使用 bs4 提供的 CSS 方法。您可以使用 SelectorGadget Chrome 扩展程序或任何其他扩展程序进行快速选择。

确保您使用的是 user-agent,否则 Google 可能会阻止您的请求,因为默认 user-agent 将是 python-requests(如果您使用的是 requests 库) 伪造用户访问的 user-agents 列表。

从那里您可以使用 select_one() 方法刮除您想要的所有其他部分。请记住,只有在 Google 提供的情况下,您才能从 Knowladge 图表中抓取信息。您可以使用 iftry-except 语句来处理异常。

代码和full example

from bs4 import BeautifulSoup
import requests
import lxml

headers = {
  "User-Agent":
  "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582"
}

html = requests.get('https://www.google.com/search?q=who is donald trump', headers=headers).text

soup = BeautifulSoup(html, 'lxml')

summary = soup.select_one('.Uo8X3b+ span').text
print(summary)

输出:

Donald John Trump is an American media personality and businessman who served as the 45th president of the United States from 2017 to 2021.
Born and raised in Queens, New York City, Trump attended Fordham University and the University of Pennsylvania, graduating with a bachelor's degree in 1968.

使用来自 SerpApi 的 Google Knowledge Graph API 的另一种方法。这是一个免费试用的付费 API。查看Playground了解更多信息。

import os
from serpapi import GoogleSearch

params = {
  "engine": "google",
  "q": "who is donald trump",
  "api_key": os.getenv("API_KEY"),
}

search = GoogleSearch(params)
results = search.get_dict()

summary = results["knowledge_graph"]['description']
print(summary)

输出:

Donald John Trump is an American media personality and businessman who served as the 45th president of the United States from 2017 to 2021.
Born and raised in Queens, New York City, Trump attended Fordham University and the University of Pennsylvania, graduating with a bachelor's degree in 1968.
<块引用>

免责声明我为 SerpApi 工作。

答案 2 :(得分:0)

我已经使用了硒Web驱动程序。并成功提取了Google结果摘要。

$ convert -version
Version: ImageMagick 6.7.8-9 2017-10-19 Q16 http://www.imagemagick.org

$ convert /tmp/A.jpg -thumbnail 200x200^ -gravity center -extent 200x200 /tmp/A_200.jpg
$ ls -al A*.jpg
-rw-r--r-- 1 ec2-user ec2-user 71680  9月 11 13:48 A.jpg
-rw-rw-r-- 1 ec2-user ec2-user 16729  9月 11 14:59 A_200.jpg

我希望它会有所帮助。如果发现错误,请告知! 附言注意缩进

注意:您应该具有要使用的浏览器的驱动程序。

答案 3 :(得分:-1)

除ID以外,以上代码均有效。使用id="rhs_block"时没有任何结果。相反,我使用了id="res"。也许最近更新了