有没有办法用相同的总结果刮取谷歌。
在这里,我使用代理来调用谷歌。
但每次由于代理(服务器的地理位置)而显示不同的结果时,
那么,有没有办法用代理服务器来刮取google结果?
答案 0 :(得分:4)
您需要使用uule参数集作为全国范围强制进行地理位置。
在这里你可以找到理论:http://moz.com/ugc/geolocation-the-ultimate-tip-to-emulate-local-search 在这里,您可以找到强制模拟任何位置的脚本:https://github.com/512banque/uule-grabber
美国的FYI uule是:w + CAIQICINVW5pdGVkIFN0YXRlcw (即查询管道工在美国进行地理定位:https://www.google.com/search?hl=en&gl=us&q=plumber&uule=w+CAIQICINVW5pdGVkIFN0YXRlcw)
您可以通过我在线投放的这个工具创建您的自定义地理位置查询:http://www.usearchfrom.com
答案 1 :(得分:0)
您还可以使用 Python params
库创建自定义 requests
请求。文档 here。
params = {
"q": "london", # <-- search query
"google_domain": "google.com", # <-- for Germany - google.de and so on.
"uule": "w+CAIQICIGQnJhemls", # <-- Brazil
}
代码和full example(摘自谷歌知识图的副标题):
from bs4 import BeautifulSoup
import requests
import 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": "london",
"gl": "br",
"hl": "pt",
"uule": "w+CAIQICIGQnJhemls",
}
response = requests.get('https://www.google.com.br/search', params=params, headers=headers).text
soup = BeautifulSoup(response, 'lxml')
text = soup.select_one('.E75vKf span').text
print(text)
输出:
Capital da Inglaterra
或者,您可以使用来自 SerApi 的 Google Search Engine Results API。它解决验证码、轮换代理并利用完整的浏览器集群。查看Playground了解更多信息。
from serpapi import GoogleSearch
import os
params = {
"engine": "google",
"q": "london",
"location": "Brazil",
"google_domain": "google.com.br",
"gl": "br",
"hl": "pt",
"api_key": os.getenv("API_KEY"),
}
search = GoogleSearch(params)
results = search.get_dict()
subtitle = results['knowledge_graph']['type']
print(subtitle)
输出:
Capital da Inglaterra
<块引用>
免责声明,我为 SerpApi 工作。