如何扩大搜索结果的抓取规模(目前在 Python 中使用 requests 和 bs4)

How to scale up scraping of search results (currently using requests and bs4 in Python)

提问人:Hack-R 提问时间:7/2/2017 最后编辑:Hack-R 更新时间:8/17/2022 访问量:316

问:

我编写了一些 Python 代码来尝试构建搜索结果链接的数据库:requests

from bs4 import BeautifulSoup
import requests
import re

for i in range(0, 1000, 20):
    url = "https://www.google.com/search?q=inurl%3Agedt.html&ie=utf-8&start=" + i.__str__() + "0&num=20"
    page = requests.get(url)
    if i == 0:
        soup = BeautifulSoup(page.content)
    else:
        soup.append(BeautifulSoup(page.content))

links = soup.findAll("a")

clean_links = []
for link in soup.find_all("a",href=re.compile("(?<=/url\?q=)(htt.*://.*)")):
    print(re.split(":(?=http)",link["href"].replace("/url?q=","")))
    clean_links.append(re.split(":(?=http)", link["href"].replace("/url?q=", "")))

然而,在只获得了 40 个结果后,谷歌怀疑我是机器人并停止提供结果。这是他们的特权,但有没有(合法的)方法可以解决这个问题?

我可以在/中进行某种身份验证吗,如果是这样,是否有某种帐户可以让我向他们支付抓取所有 10-20,000 个结果的特权?requestsbs4

python 网页抓取 语言与谷歌 搜索

评论

0赞 idjaw 7/2/2017
你有没有看到谷歌搜索API是否能帮助你实现你的目标:developers.google.com/custom-search/json-api/v1/overview这里
0赞 jonrsharpe 7/2/2017
1. 是的,请求当然支持身份验证。2. 你必须问谷歌。
0赞 Hack-R 7/2/2017
@idjaw我已经研究了几个小时的谷歌文档,但还没有发现任何有用的东西。如果我错了,请纠正我,但我认为该 API 适用于他们现已停用的网站搜索服务和一些相关的网站管理员工具,用于集成来自您自己域的自定义搜索。我认为他们在 API 中的 2 个主要工具在 4 月 1 日停止销售,但无论如何都不是我需要的。但好主意。
1赞 idjaw 7/2/2017
@Hack-R 是的,我没有对此进行任何广泛的阅读,只是看起来很相关。此外,这个答案已经过时了,但显然您仍然可以使用 API -> stackoverflow.com/questions/2445308/ 搜索网络...。除此之外,我认为这很可能是谷歌不希望你做的事情,如果他们不提供明显的 API 来让它变得容易。
0赞 Stephen Ostermiller 8/17/2022
提交程序化搜索查询违反了 Google 的网站站长指南和服务条款。针对 Google 运行此代码可能会导致 Google 显示来自您的 IP 地址的搜索验证码。

答: 暂无答案