【问题标题】:Unable to scrape google search result using beautiful soup无法使用漂亮的汤刮掉谷歌搜索结果
【发布时间】:2019-09-28 08:12:27
【问题描述】:

我正在尝试从谷歌搜索结果中抓取产品的 Flipkart 链接。但是,当我尝试通过将链接与文本“flipkart”进行匹配来打印链接时,它不会打印任何内容。我究竟做错了什么?

这里是html结构的一部分:

<div class="r">
<a href="https://www.flipkart.com/redmi-note-7-pro-nebula-red-64- 
gb/p/itmferghuf9ky6ru" ping="/url?=https://www.flipkart.com/redmi- 
note-7-pro-nebula-red-64-gb/p/itmferghuf9ky6ru&amp"> 

查询结果在 div class="r" 下。从那个 div 我试图获取锚标记链接。

这是我的代码

input='note 7 pro'
urllib.parse.quote_plus(input)

html = getHTML('https://www.google.co.in/search?q='+input)
main_div=html.findAll('div', {'class':'r'})

for div in main_div:
    link = div.find('a')[href]
    if 'flipkart' in link:
        print(link)

输出应该是产品的完整 Flipkart 链接。但是程序没有显示任何输出。

【问题讨论】:

    标签: python-3.x beautifulsoup


    【解决方案1】:

    您肯定会在多个请求中收到来自 Google 的验证码。无论如何,我尝试抓取一个谷歌页面,div 上的课程是g

    但您正在搜索的链接在 h3 中,带有 r 类。

    所以在我看来你只需要改变

    main_div=html.findAll('div', {'class':'r'})
    

    通过

    main_div=html.findAll('h3', {'class':'r'})
    

    目前应该可以使用

    【讨论】:

    • 感谢工作!但是您所说的来自 Google 的验证码是什么意思?
    • 我认为(不确定)如果您尝试从同一个 IP 进行大量抓取,谷歌会在搜索页面上显示验证码。但随着时间的推移你会看到。很高兴它奏效了!也许你可以接受答案;-)
    【解决方案2】:

    要抓取 Flipkart 链接,您可以使用 select_one() bs4 方法执行以下操作:

    soup.select_one('CSS_SELECTOR')
    

    online IDE中的代码和示例:

    import requests, lxml
    from bs4 import BeautifulSoup
    
    headers = {
        "User-Agent":
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3538.102 Safari/537.36 Edge/18.19582"
    }
    
    params = {'q': 'flipkart redmi note 10'}
    html = requests.get('https://www.google.com/search', headers=headers, params=params).text
    soup = BeautifulSoup(html, 'lxml')
    
    filpkart_link = soup.select_one('.yuRUbf').a['href']
    print(filpkart_link)
    
    # output:
    '''
    https://www.flipkart.com/redmi-note-10-frost-white-64-gb/p/itm23973bd36fd21
    '''
    

    或者,您可以使用来自 SerpApi 的 Google Search Engine Results API 来实现相同的目的。这是一个付费 API,可免费试用 5,000 次搜索。

    基本上,主要区别在于最终用户已经完成了所有工作,您不必弄清楚如何使解析器工作,例如维护解析器。

    要集成的代码:

    from serpapi import GoogleSearch
    import os
    
    params = {
      "api_key": os.getenv("API_KEY"),
      "engine": "google",
      "q": "flipkart redmi note 10",
    }
    
    search = GoogleSearch(params)
    results = search.get_dict()
    # [0] - index of the first results from Google Search Results
    flipkart_link = results['organic_results'][0]['link']
    print(flipkart_link)
    # output:
    '''
    https://www.flipkart.com/redmi-note-10-frost-white-64-gb/p/itm23973bd36fd21
    '''
    

    免责声明,我为 SerpApi 工作。

    【讨论】:

      猜你喜欢
      • 2016-01-30
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      • 2017-12-23
      相关资源
      最近更新 更多