首页 > 解决方案 > 在 colab 但不是在本地使用 BeautifulSoup 时重新验证

问题描述

我编写了一个脚本来从 div 中抓取数据,如果 div 类中存在预先指定的字符串,则返回一个布尔值,一切都在本地完美运行。但是,当我将代码复制到 colab 笔记本时,脚本会命中 ReCaptcha 并返回 403 状态代码。

我的代码如下:

def stock_checker(listofurls):

       headers = {
       'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like 
        Gecko) Chrome/79.0.3945.88 Safari/537.36"
        }

       stock_level = []

       for target_url in tqdm(listofurls): 
           print(target_url)
           query = requests.get(target_url,headers=headers).text
           html = soup(query, "html.parser")
           soup_result = html.find("div", {"class": "product-details__options-basket"}).text
           stock_bool = "Out of Stock" if "Out of Stock" in str(soup_result) else "In Stock"
           stock_level.append(stock_bool)

        return pd.DataFrame({"URls" : listofurls, "In Stock" : stock_level})

print(stock_checker(myurllist))

返回的 html 用于 ReCaptcha,因此我在下面引用的 div 不存在并且代码错误。

关于为什么这发生在 colab 而不是本地的任何想法?和/或如何解决问题?

Ps - 我将它放在 colab 中,以便其他人可以通过运行代码而不需要编码来使用。

标签: pythonweb-scrapingjupyter-notebookgoogle-colaboratory

解决方案


RE:“为什么会这样?” --

无头浏览器经常被用于滥用,因此更经常接受反滥用测试,如验证码。从云提供商典型的共享 IP 范围执行时,机会可能更大。

简短的版本是您正在使用的网站可能正在按预期工作。如果你不遵守它的robots.txt指令,我会从那里开始,以减少遇到反滥用机制的机会。


推荐阅读