【问题标题】:how to get correct url in google search using python如何使用python在谷歌搜索中获取正确的url
【发布时间】:2019-09-02 04:19:31
【问题描述】:

我正在尝试获取 google 搜索中的第一个 URL。就像我在谷歌上搜索“tcs”,它给出了http://www.tcs.com/。 大多数结果是正确的,但有时我没有得到正确的 URL。我想要一个解决方案。 在谷歌搜索上试试这个:-“Euler Baubetr.u.Bauleitungsges.mbH” 结果来了:-https://www.firmenwissen.com/.../EULER_BAUBETREUUNG_UND_BAULEITUNGSGESELLSCHAFT_MBH.html

在中间的输出URL中……来了

所需的输出是:-https://www.firmenwissen.com/en/az/firmeneintrag/63654/6110225969/EULER_BAUBETREUUNG_UND_BAULEITUNGSGESELLSCHAFT_MBH.html

代码:-

   import requests

   from bs4 import BeautifulSoup as bs

   var="Euler Baubetr. u. Bauleitungsges. mbH"

   goog_search = "https://www.google.co.uk/search?sclient=psyab&client=ubuntu&hs=k5b&channel=fs&biw=1366&bih=648&noj=1&q=" + var


   r = requests.get(goog_search)

   soup = bs(r.text, "html.parser")

   url=soup.find('cite').text

   print(url)

【问题讨论】:

标签: python beautifulsoup python-requests google-search python-3.7


【解决方案1】:

您应该导航正确的 href 以获取 url,请参阅下面的代码...

import requests
from bs4 import BeautifulSoup as bs

var="Euler Baubetr. u. Bauleitungsges. mbH"
goog_search = "https://www.google.co.uk/search?sclient=psyab&client=ubuntu&hs=k5b&channel=fs&biw=1366&bih=648&noj=1&q=" + var

r = requests.get(goog_search)
soup = bs(r.text, "html.parser")
url = soup.find('h3',attrs={'class':'r'}).a['href']
print(url)

【讨论】:

    【解决方案2】:

    您可以通过传递additional URL parameters 获得更准确的结果,例如搜索的国家、语言等:

    params = {'key1': 'value1', 'key2': 'value2'}
    response = requests.get('YOUR_URL', params=params)
    
    # or in your case
    params = {
      "q": "samurai cop, what does katana mean", # query
      "gl": "us",                                # country to search from
      "hl": "en"                                 # language 
      # additional parameters
    }
    

    要获取第一个链接,您正在寻找这个 (CSS selectors reference):

    first_link = soup.select_one('.yuRUbf a')['href']
    

    接下来会出现的问题是没有指定user-agent。默认的requestsuser-agentpython-requests,因此Google 会阻止请求,因为它知道这是一个机器人而不是“真正的”用户访问。用户代理通过将此信息添加到 HTTP request headers 来伪造用户访问。

    user-agent 传递给请求headers

    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"
    }
    response = requests.get('YOUR_URL', headers=headers)
    

    代码:

    from bs4 import BeautifulSoup
    import requests, json, 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"
    }
    
    params = {
      "q": "Euler Baubetr. u. Bauleitungsges. mbH",
      "gl": "us",
      "hl": "en"
    }
    
    html = requests.get("https://www.google.com/search", headers=headers, params=params)
    soup = BeautifulSoup(html.text, 'lxml')
    
    first_link = soup.select_one('.yuRUbf a')['href']
    print(first_link)
    
    # https://www.titanwolf.org/Network/q/45d43c9f-f7d8-4f78-acde-14112341d038/y
    

    或者,您可以使用来自 SerpApi 的 Google Organic Results API 来实现相同的目的。这是一个带有免费计划的付费 API。

    您的情况的不同之处在于,您不必处理此类问题或随着时间的推移维护解析器,因为它已经为最终用户完成,唯一需要做的就是迭代结构化 JSON 并快速获取您想要的数据。

    要集成的代码:

    import os
    from serpapi import GoogleSearch
    
    params = {
        "engine": "google",                              # search engine to search from
        "q": "Euler Baubetr. u. Bauleitungsges. mbH",    # query
        "hl": "en",                                      # language
        "gl": "us",                                      # country to search from
        "api_key": os.getenv("API_KEY"),                 # API key environment
    }
    
    search = GoogleSearch(params)
    results = search.get_dict()
    
    # [0] first index result from organic results
    first_link = results['organic_results'][0]['link']
    print(first_link)
    
    # https://www.titanwolf.org/Network/q/45d43c9f-f7d8-4f78-acde-14112341d038/y
    

    免责声明,我为 SerpApi 工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-19
      • 2016-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多