我最近一直在学习很多python来处理一些工作项目。
目前我需要使用谷歌搜索结果做一些网页抓取。我发现有几个网站演示了如何使用ajax google api进行搜索,但是在尝试使用它之后,它似乎不再受支持了。有什么建议?
我一直在寻找方法,但似乎无法找到目前有效的解决方案。
您可以随时直接抓取Google搜索结果。为此,您可以使用URL https://google.com/search?q=<Query>
这将返回前10个搜索结果。
然后你可以使用lxml来解析页面。根据您使用的内容,您可以通过CSS-Selector(.r a
)或使用XPath-Selector(//h3[@class="r"]/a
)查询生成的节点树
在某些情况下,生成的网址会重定向到Google。通常它包含一个查询参数q
,它将包含实际的请求URL。
使用lxml和请求的示例代码:
from urllib.parse import urlencode, urlparse, parse_qs
from lxml.html import fromstring
from requests import get
raw = get("https://www.google.com/search?q=StackOverflow").text
page = fromstring(raw)
for result in page.cssselect(".r a"):
url = result.get("href")
if url.startswith("/url?"):
url = parse_qs(urlparse(url).query)['q']
print(url[0])
关于谷歌禁止你的IP的说明:根据我的经验,如果你开始用搜索请求发送谷歌垃圾邮件谷歌只禁止。如果谷歌认为你是机器人,它会回复503。
这是另一种可用于刮擦SERP的服务(https://zenserp.com)它不需要客户端而且更便宜。
这是一个python代码示例:
import requests
headers = {
'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)
您还可以使用像Serp API这样的第三方服务,这是Google搜索引擎的结果。它解决了被阻止的问题,您不必租用代理并自行解析结果。
它很容易与Python集成:
from lib.google_search_results import GoogleSearchResults
params = {
"q" : "Coffee",
"location" : "Austin, Texas, United States",
"hl" : "en",
"gl" : "us",
"google_domain" : "google.com",
"api_key" : "demo",
}
query = GoogleSearchResults(params)
dictionary_results = query.get_dictionary()
GitHub:https://github.com/serpapi/google-search-results-python