使用代理刮刮谷歌相同的结果

时间:2014-08-06 05:29:17

标签: proxy web-scraping

有没有办法用相同的总结果刮取谷歌。

在这里,我使用代理来调用谷歌。

但每次由于代理(服务器的地理位置)而显示不同的结果时,

那么,有没有办法用代理服务器来刮取google结果?

2 个答案:

答案 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 工作。