【问题标题】:Prevent from being banned from google scraping with BeautifulSoup防止被禁止使用 BeautifulSoup 进行谷歌抓取
【发布时间】:2020-03-21 15:44:35
【问题描述】:

我想用PythonBeautifulSoup 制作谷歌新闻scraper,但我读到有可能会被禁止。

我还了解到,我可以通过使用一些轮换代理和轮换 IP 地址来防止这种情况。 我唯一能做的就是旋转User-Agent。 您能告诉我如何添加轮换代理和轮换 IP 地址吗?

我知道它应该添加到request.get() 部分,但我不知道如何。

这是我的代码:

from bs4 import BeautifulSoup
import requests

headers = {'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36'}

term = 'usa'
page=0

for page in range(1,5):

    page = page*10

    url = 'https://www.google.com/search?q={}&tbm=nws&sxsrf=ACYBGNTx2Ew_5d5HsCvjwDoo5SC4U6JBVg:1574261023484&ei=H1HVXf-fHfiU1fAP65K6uAU&start={}&sa=N&ved=0ahUKEwi_q9qog_nlAhV4ShUIHWuJDlcQ8tMDCF8&biw=1280&bih=561&dpr=1.5'.format(term,page)
    print(url)

    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.text, 'html.parser')

    headline_text = soup.find_all('h3', class_= "r dO0Ag")

    snippet_text = soup.find_all('div', class_='st')

    news_date = soup.find_all('div', class_='slp')

    print(len(news_date))

【问题讨论】:

标签: python beautifulsoup proxy


【解决方案1】:

还有一个更简单的技巧,比如在 Brave Tor 浏览器中使用Google colab,然后查看结果会得到不同的 ip 地址。

因此,一旦您获得所需的数据,您就可以在 jupyter notebook 或 VS Code 或其他地方使用该数据。

看,截图中的结果:

使用免费代理会出错,因为免费代理上的请求太多,因此,您必须每次选择不同的代理,其代理的流量较低,因此从数百个中选择一个是一项糟糕的任务。

使用 Brave Tor VPN 获得正确结果:

【讨论】:

    【解决方案2】:

    您可以使用https://gimmmeproxy.com 来旋转代理,它是python 包装器:https://github.com/DeyaaMuhammad/GimmeProxyApi

    proxy = GimmeProxyAPI(protocol="https")
    
    proxies = {
      'http': proxy,
      'https': proxy
    }
    
    requests.get('https://example.org', proxies=proxies)
    

    【讨论】:

    • 在编写此代码之前是否需要安装任何东西?
    • 我猜你将把 GimmeProxyApi 模块代码下载到你的项目中,因为我在 pypi.org 上找不到它。
    【解决方案3】:

    如果您的问题是“如何做才能不被禁止?”,那么答案是“不要违反 TOS”,这意味着完全不进行抓取并使用正确的搜索 API。 根据您使用的 IP 地址,有一定数量的“免费”谷歌搜索使用。因此,如果您只抓取少量搜索,这应该没问题。

    如果您的问题是“如何将代理与请求模块一起使用?”,那么您应该开始查看 here

    import requests
    
    proxies = {
      'http': 'http://10.10.1.10:3128',
      'https': 'http://10.10.1.10:1080',
    }
    
    requests.get('http://example.org', proxies=proxies)
    

    但这只是 python 方面,您需要自己设置一个网络代理(或者甚至更好的代理池),然后使用算法在每 N 个请求中选择一个不同的代理。

    【讨论】:

    • 所以我不能把它粘贴到我的代码中?我已经阅读了您发布的链接,几天前我已经阅读了它。但是当我粘贴你发布的代码时,我得到一个错误
    • 代理服务器与python无关(虽然你用python实现了一个)。如果您不想自己设置代理服务器,那么可以使用一些公共 http 代理(谷歌它们),但请记住,使用 http 时存在隐私问题,并且公共服务器的大部分速度都很慢/不可靠时间。
    • 我试过这个,但我总是得到这个错误,我也尝试过不同的代理:文件“/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site -packages/urllib3/poolmanager.py",第 420 行,在 init 中引发 ProxySchemeUnknown(proxy.scheme) urllib3.exceptions.ProxySchemeUnknown:不支持代理方案无
    【解决方案4】:

    如果您想学习网页抓取,最好选择其他网站,例如 reddit 或在线杂志。谷歌新闻(和其他谷歌服务)受到很好的保护,不会被抓取,它们会定期更改类的名称,以防止您以简单的方式进行操作。

    【讨论】:

    • 我看了一些教程和课程2-3年都一样。我不是说他们不会改变他们,我只是说有些事情保持不变。
    【解决方案5】:

    您可以使用来自 Google 的适当 API 进行搜索:

    https://developers.google.com/custom-search/v1/overview

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 2023-02-11
    相关资源
    最近更新 更多