import requests
def search(query, pages=4, rsz=8):
url = 'https://ajax.googleapis.com/ajax/services/search/web'
params = {
'v': 1.0, # Version
'q': query, # Query string
'rsz': rsz, # Result set size - max 8
}
for s in range(0, pages*rsz+1, rsz):
params['start'] = s
r = requests.get(url, params=params)
for result in r.json()['responseData']['results']:
yield result
在第一次2,3尝试,它是检索所有需要的网页,但在2,3尝试后,它是没有得到任何结果。它是返回“无”或[]。谷歌是封锁我的IP后,几次尝试?任何解决方案?
3条答案
按热度按时间bhmjp9jg1#
我不确定这是否可行,但避免被不鼓励刮取的网站阻止的唯一方法是在检索网页时使用代理。请检查代理如何在您的代码中使用。
jvidinwx2#
这个问题是通过请求和BeautifulSoup解决的。
ugmeyewa3#
请确保您使用的是
user-agent
,因为如果发送请求时没有使用user-agent
,Google可能会阻止该请求。例如,默认的requests
user-agent
是python-requests
,这样网站就知道这是一个发送请求的脚本,并可能会阻止它。此外,也没有必要为
auth=('user', 'pass')
,因为你不必登录任何地方时,搜索谷歌。在线IDE中的代码和完整示例:
部分输出:
或者,您也可以使用SerpApi的Google Organic Results API来实现相同的功能。
这是一个付费的API,有一个免费的计划,处理来自谷歌或其他搜索引擎的块,可以扩展到月球,并让最终用户考虑什么数据提取,而不是从头开始创建一个解析器和维护它,并找出如何绕过来自谷歌或其他搜索引擎的块。
要集成的代码:
部分输出:
免责声明,我为SerpApi工作。