簡體   English   中英

Python:通過搜索解析來自 Google 的鏈接

[英]Python: parse links from Google with search

我需要在谷歌搜索后解析帶有結果的鏈接。 當我嘗試查看頁面代碼和Ctrl + U我找不到帶有鏈接的元素,這是我想要的。 但是當我使用Ctrl + Shift + I看到元素代碼時,我可以看到我應該解析哪些元素來獲取鏈接。 我用代碼

url = 'https://www.google.ru/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=' + str(query)
html = requests.get(url).content
soup = BeautifulSoup(html, 'html.parser')
links = soup.findAll('cite')

但它返回空列表,因為沒有這個元素。 我認為返回requests.get(url).content html-code未滿,因此我無法獲取此元素。 我嘗試使用google.search但它返回了it isn't used now.錯誤it isn't used now. 有什么方法可以在谷歌中獲得與搜索的鏈接?

采用:

url = 'https://www.google.ru/search?q=name&rct=' + str(query)
html = requests.get(url).text
soup = BeautifulSoup(html, 'html.parser')
links = soup.findAll('cite')

嘗試:

url = 'https://www.google.ru/search?q=' + str(query)
html = requests.get(url)
soup = BeautifulSoup(html.text, 'lxml')
links = soup.findAll('cite')
print([link.text for link in links])

要安裝lxml ,請參見http://lxml.de/installation.html

*注意:之所以選擇lxml而不是html.parser是因為有時html.parser的結果不完整,我也不知道為什么

為了獲得您在瀏覽器中看到的實際響應,您需要發送額外的標頭,更具體地說是user-agent (除了發送額外的查詢參數),當機器人或瀏覽器發送一個虛假的user-agent字符串來宣布自己是一個不同的客戶端。

這就是為什么您得到空輸出的原因,因為您收到了具有不同元素( CSS選擇器、 ID等)的不同 HTML。

您可以在我寫的關於如何減少網頁抓取時被阻止的機會的博客文章中閱讀更多相關信息。

通過user-agent

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'
}

requests.get('URL', headers=headers)

在線IDE中的代碼和示例:

from bs4 import BeautifulSoup
import requests, 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': 'minecraft', # query
  'gl': 'us',       # country to search from
  'hl': 'en',       # language
}

html = requests.get('https://www.google.com/search', headers=headers, params=params)
soup = BeautifulSoup(html.text, 'lxml')

for result in soup.select('.tF2Cxc'):
  link = result.select_one('.yuRUbf a')['href']
  print(link, sep='\n')

---------
'''
https://www.minecraft.net/en-us/
https://classic.minecraft.net/
https://play.google.com/store/apps/details?id=com.mojang.minecraftpe&hl=en_US&gl=US
https://en.wikipedia.org/wiki/Minecraft
'''

或者,您可以使用 SerpApi 的Google Organic API來實現相同的目的。 這是一個帶有免費計划的付費 API。

不同之處在於您不必從頭開始創建它並在出現崩潰時隨着時間的推移維護它。

集成代碼:

import os
from serpapi import GoogleSearch

params = {
  "engine": "google",
  "q": "minecraft",
  "hl": "en",
  "gl": "us",
  "api_key": os.getenv("API_KEY"),
}

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

for result in results["organic_results"]:
  print(result['link'])

-------
'''
https://www.minecraft.net/en-us/
https://classic.minecraft.net/
https://play.google.com/store/apps/details?id=com.mojang.minecraftpe&hl=en_US&gl=US
https://en.wikipedia.org/wiki/Minecraft
'''

免責聲明,我為 SerpApi 工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM