【问题标题】:How to print the first google search result link using bs4?如何使用 bs4 打印第一个 google 搜索结果链接?
【发布时间】:2021-10-28 09:22:48
【问题描述】:

我是 python 的初学者,我正在尝试从 google 获取第一个搜索结果链接,该链接使用 beautifulsoup 存储在 class='yuRUbf' 的 div 中。当我运行脚本输出为“无”时,这里的错误是什么。

import requests
import bs4

url = 'https://www.google.com/search?q=site%3Astackoverflow.com+how+to+use+bs4+in+python&sxsrf=AOaemvKrCLt-Ji_EiPLjcEso3DVfBUmRbg%3A1630215433722&ei=CR0rYby7K7ue4-EP7pqIkAw&oq=site%3Astackoverflow.com+how+to+use+bs4+in+python&gs_lcp=Cgdnd3Mtd2l6EAM6BwgAEEcQsAM6BwgjELACECc6BQgAEM0CSgQIQRgAUMw2WPh_YLiFAWgBcAJ4AIABkAKIAd8lkgEHMC4xMC4xM5gBAKABAcgBCMABAQ&sclient=gws-wiz&ved=0ahUKEwj849XewdXyAhU7zzgGHW4NAsIQ4dUDCA8&uact=5'

request_result=requests.get( url )
soup = bs4.BeautifulSoup(request_result.text,"html.parser")
productDivs = soup.find("div", {"class": "yuRUbf"})
print(productDivs)

【问题讨论】:

    标签: python python-3.x beautifulsoup


    【解决方案1】:

    让我们看看:

        from bs4 import BeautifulSoup
    import requests, json
    
    headers = {
        'User-agent':
        "useragent"
    }
    
    
    html = requests.get('https://www.google.com/search?q=hello', headers=headers).text
    soup = BeautifulSoup(html, 'lxml')
    # locating div element with a tF2Cxc class
    # calling for <a> tag and then calling for 'href' attribute
    link = soup.find('div', class_='tF2Cxc').a['href']
    print(link)
    

    输出:

    ''' https://www.youtube.com/watch?v=YQHsXMglC9A

    【讨论】:

      【解决方案2】:

      因为你想首先谷歌搜索你正在寻找的类名可能与名称不同,所以首先你可以先手动找到该链接,这样很容易识别

      import requests
      import bs4
      
      url = 'https://www.google.com/search?q=site%3Astackoverflow.com+how+to+use+bs4+in+python&sxsrf=AOaemvKrCLt-Ji_EiPLjcEso3DVfBUmRbg%3A1630215433722&ei=CR0rYby7K7ue4-EP7pqIkAw&oq=site%3Astackoverflow.com+how+to+use+bs4+in+python&gs_lcp=Cgdnd3Mtd2l6EAM6BwgAEEcQsAM6BwgjELACECc6BQgAEM0CSgQIQRgAUMw2WPh_YLiFAWgBcAJ4AIABkAKIAd8lkgEHMC4xMC4xM5gBAKABAcgBCMABAQ&sclient=gws-wiz&ved=0ahUKEwj849XewdXyAhU7zzgGHW4NAsIQ4dUDCA8&uact=5'
      
      request_result=requests.get( url )
      
      soup = bs4.BeautifulSoup(request_result.text,"html.parser")
      

      使用select方法:

      1. 我使用了 css 选择器方法,它可以识别所有匹配的 divs 和我从索引位置 1 获取的列表

      2. 我使用select_one 获取a 标签并找到href 根据它!

      main_data=soup.select("div.ZINbbc.xpd.O9g5cc.uUPGi")[1:]
      main_data[0].select_one("a")['href'].replace("/url?q=","")
      

      使用find方法:

      main_data=soup.find_all("div",class_="ZINbbc xpd O9g5cc uUPGi")[1:]
      main_data[0].find("a")['href'].replace("/url?q=","")
      

      输出[两种情况相同]:

      'https://stackoverflow.com/questions/23102833/how-to-scrape-a-website-which-requires-login-using-python-and-beautifulsoup&sa=U&ved=2ahUKEwjGxv2wytXyAhUprZUCHR8mBNsQFnoECAkQAQ&usg=AOvVaw280R9Wlz2mUKHFYQUOFVv8'
      

      【讨论】:

      • 查找方法效果很好,但是当我再次更改“url”时,输出无效
      • 因为类名可能不同,所以它不会总是相同的类名
      • 那么适用于所有 url 的解决方案是什么?当我检查时,我在所有页面上都得到了相同的类 'class="yuRUbf"
      • 能否再分享一下网址供参考
      • 是的,对于上面的汽车 URL 是正确的,它可以识别 div,但问题是包含在第一个索引中的 URL 与网页中的不同,在这种情况下,您可以使用 try 和 except 阻止从和如果 status_code 不是 200 那么你可以去下一个索引
      猜你喜欢
      • 2021-06-03
      • 2019-04-05
      • 1970-01-01
      • 1970-01-01
      • 2019-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多