使用Python抓取和解析Google搜索结果

使用Python抓取和解析Google搜索结果,python,screen-scraping,web-scraping,google-search-api,Python,Screen Scraping,Web Scraping,Google Search Api,我问了一个关于实现抓取和保存网页的一般想法的问题。 原始问题的一部分是:如何从互联网上抓取和保存大量“关于”的页面 通过进一步的研究,我得到了一些关于抓取和解析的选择(列在底部) 今天,我遇到了另一个关于如何从谷歌搜索结果中获取信息的问题。这为我的问题提供了一个很好的替代方案,可以节省爬行部分的所有工作 新的问题是:在Python中,要抓取给定关键字的谷歌搜索结果,在本例中为“About”,最后获取链接以进行进一步解析。 方法和库的最佳选择是什么?(以易于学习和易于实施为衡量标准) p、 在美国

我问了一个关于实现抓取和保存网页的一般想法的问题。 原始问题的一部分是:如何从互联网上抓取和保存大量“关于”的页面

通过进一步的研究,我得到了一些关于抓取和解析的选择(列在底部)

今天,我遇到了另一个关于如何从谷歌搜索结果中获取信息的问题。这为我的问题提供了一个很好的替代方案,可以节省爬行部分的所有工作

新的问题是:在Python中,要抓取给定关键字的谷歌搜索结果,在本例中为“About”,最后获取链接以进行进一步解析。 方法和库的最佳选择是什么?(以易于学习和易于实施为衡量标准)

p、 在美国,同样的事情也被实施了,但是关闭了,并要求更多的结果。如果没有开源软件,我宁愿自己动手,同时学习更多Python

哦,顺便说一句,如果有的话,建议解析搜索结果中的链接会很好。尽管如此,它还是易于学习和实施。刚开始学习PythonP


最终更新,问题已解决。使用xgoogle编写代码,请阅读下面部分中的注释,以使xgoogle正常工作

import time, random
from xgoogle.search import GoogleSearch, SearchError

f = open('a.txt','wb')

for i in range(0,2):
    wt = random.uniform(2, 5)
    gs = GoogleSearch("about")
    gs.results_per_page = 10
    gs.page = i
    results = gs.get_results()
    #Try not to annnoy Google, with a random short wait
    time.sleep(wt)
    print 'This is the %dth iteration and waited %f seconds' % (i, wt)
    for res in results:
        f.write(res.url.encode("utf8"))
        f.write("\n")

print "Done"
f.close()

注意关于xgoogle(以下由Mike Pennington回答): 由于谷歌搜索结果的变化,Github的最新版本在默认情况下已经不起作用了。该工具主页上的这两个回复()给出了一个解决方案,目前仍在使用此调整。但也许有一天,由于谷歌的改变/封锁,它可能会再次停止工作


迄今已知的资源:

  • 对于抓取,这似乎是一个流行的选择,一个名为的webapp非常有趣,并且有一个extract-it库供离线/本地使用。在不同的讨论中也被多次提到

  • 对于解析HTML,似乎是最重要的 受欢迎的选择。当然也是

    • 您可能会发现。。。您似乎要求的大部分内容都在那里…

      有一个用于模拟浏览器的库。我使用它时,有必要登录谷歌电子邮件帐户。虽然它是一个很好的工具,有一个很好的想法,但它很旧,现在似乎缺乏支持(最新版本于2007年发布)。 如果您想要检索需要cookie处理或身份验证的结果,那么它可能很有用。因此,
      twill
      可能是最佳选择之一。 顺便说一句,它基于
      mechanize


      至于解析,你是对的,
      BeautifulSoup
      Scrapy
      都很棒。
      BeautifulSoup
      背后的一个很酷的东西是它可以处理无效的HTML(例如,与之不同)。

      看看这个很棒的web抓取URL库包装器

      这应该很方便…有关更多信息,请访问-

      这一款适合目前使用。如果进行了任何搜索,刮板可以通过浏览几页来获取该搜索的100个项目。我试图使用函数完美地完成代码,但ipv4问题出现了,页面被重定向到带有captcha的页面。仍然不明白为什么这个可以工作,但如果它被包装在函数中,那么它就不再工作了。顺便说一句,刮板看起来有点笨拙,因为我在刮板中使用了两次相同的for循环,所以它不能跳过第一页的内容

      import requests ; from bs4 import BeautifulSoup
      
      search_item = "excel"
      base = "http://www.google.de"
      url = "http://www.google.de/search?q="+ search_item
      
      response = requests.get(url)
      soup = BeautifulSoup(response.text,"lxml")
      for item in soup.select(".r a"):
          print(item.text)
      for next_page in soup.select(".fl"):
          res = requests.get(base + next_page.get('href'))
          soup = BeautifulSoup(res.text,"lxml")
          for item in soup.select(".r a"):
              print(item.text)
      

      使用Python抓取Google搜索结果的另一个选项是one by

      我喜欢API优先的方法,它易于使用,JSON结果也易于集成到我们的解决方案中

      下面是一个
      curl
      请求的示例:

      curl "https://app.zenserp.com/api/search" -F "q=Pied Piper" -F "location=United States" -F "search_engine=google.com" -F "language=English" -H "apikey: APIKEY"
      
      答复如下:

      {
        "q": "Pied Piper",
        "domain": "google.com",
        "location": "United States",
        "language": "English",
        "url": "https://www.google.com/search?q=Pied%20Piper&num=100&hl=en&gl=US&gws_rd=cr&ie=UTF-8&oe=UTF-8&uule=w+CAIQIFISCQs2MuSEtepUEUK33kOSuTsc",
        "total_results": 17100000,
        "auto_correct": "",
        "auto_correct_type": "",
        "results": []
      }
      
      Python代码,例如:

      import requests
      
      headers = {
          'apikey': 'APIKEY',
      }
      
      params = (
          ('q', 'Pied Piper'),
          ('location', 'United States'),
          ('search_engine', 'google.com'),
          ('language', 'English'),
      )
      
      response = requests.get('https://app.zenserp.com/api/search', headers=headers, params=params)
      

      下面是一个Python脚本,它使用
      请求
      美化组
      来抓取Google结果

      import urllib
      import requests
      from bs4 import BeautifulSoup
      
      # desktop user-agent
      USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:65.0) Gecko/20100101 Firefox/65.0"
      # mobile user-agent
      MOBILE_USER_AGENT = "Mozilla/5.0 (Linux; Android 7.0; SM-G930V Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36"
      
      query = "hackernoon How To Scrape Google With Python"
      query = query.replace(' ', '+')
      URL = f"https://google.com/search?q={query}"
      
      headers = {"user-agent": USER_AGENT}
      resp = requests.get(URL, headers=headers)
      
      if resp.status_code == 200:
          soup = BeautifulSoup(resp.content, "html.parser")
          results = []
          for g in soup.find_all('div', class_='r'):
              anchors = g.find_all('a')
              if anchors:
                  link = anchors[0]['href']
                  title = g.find('h3').text
                  item = {
                      "title": title,
                      "link": link
                  }
                  results.append(item)
          print(results)
      

      要从谷歌搜索结果的多个页面中提取链接,您可以使用。这是一个免费试用的付费API

      导入操作系统
      #Python包:https://pypi.org/project/google-search-results
      从serpapi导入谷歌搜索
      参数={
      “引擎”:“谷歌”,
      “q”:“关于”,
      “api_键”:os.getenv(“api_键”),
      }
      搜索=谷歌搜索(参数)
      pages=search.pagination()
      对于结果页:
      打印(f“当前页面:{result['serpapi_pagination']['Current']}\n”)
      对于结果中的有机结果[“有机结果”]:
      印刷品(
      f“标题:{organic_结果['Title']}\n链接:{organic_结果['link']}\n”
      )
      
      输出

      Current page: 12
      URL: https://fi.google.com/
      URL: https://www.mayoclinic.org/about-mayo-clinic
      
      ...
      
      Current page: 18
      URL: https://igem.org/About
      URL: https://www.ieee.org/
      URL: https://www.cancer.org/
      
      ...
      

      免责声明:我在SerpApi工作。

      你走的是对的,但是如果谷歌阻止你,或者如果你太咄咄逼人,开始抛出CAPTCHA,不要感到惊讶。@jathanism哦。。是 啊正确的。。我已经考虑过了。谢谢你的提示。希望我能在被谷歌抓到之前得到我的结果。你为什么不使用谷歌的真实数据呢?@DanielRoseman,不错的一个。现在我来看看。它只打印了2页的搜索结果,而谷歌的搜索结果显示超过数千页。不管怎样,我能把所有的url都抓取到底吗?仔细看,似乎正是我要找的东西。这是谷歌首次推出“谷歌刮python”。仅搜索stackoverflow和pypi…仅支付有限的免费访问
      Current page: 12
      URL: https://fi.google.com/
      URL: https://www.mayoclinic.org/about-mayo-clinic
      
      ...
      
      Current page: 18
      URL: https://igem.org/About
      URL: https://www.ieee.org/
      URL: https://www.cancer.org/
      
      ...