python - 在 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 中,以便其他人可以通过运行代码而不需要编码来使用。
解决方案
RE:“为什么会这样?” --
无头浏览器经常被用于滥用,因此更经常接受反滥用测试,如验证码。从云提供商典型的共享 IP 范围执行时,机会可能更大。
简短的版本是您正在使用的网站可能正在按预期工作。如果你不遵守它的robots.txt
指令,我会从那里开始,以减少遇到反滥用机制的机会。
推荐阅读
- python - 如何使用 Django 查询嵌套的外键共享属性
- pandas - 查询 SQLite DB 与在 Python 中操作 pandas.Dataframe 一样快
- javascript - 返回字符串数组中大写字符的总数
- excel - 将固定数量添加到公式范围
- java - 上传大文件时不会触发 DataEvent.UPLOAD_COMPLETE_DATA,而上传小文件时会触发 DataEvent.UPLOAD_COMPLETE_DATA
- javascript - 删除嵌套数组中的空对象
- c++ - 具有位域的结构的 Consexpr 构造函数
- javascript - 在 Javascript/React 中格式化设备 ID 和日期
- sql - 在 Oracle 中计算并添加多列的总计行
- reactjs - 如何正确使用 react-datepicker dateFormat