python - 网页抓取访问被拒绝 | Cloudflare 限制访问
问题描述
我正在尝试使用 python 脚本从www.cclonline.com网站访问和获取数据。这是代码。
import requests
from requests_html import HTML
source = requests.get('https://www.cclonline.com/category/409/PC-Components/Graphics-Cards/')
html = HTML(html=source.text)
print(source.status_code)
print(html.text)
这是我得到的错误,
403
Access denied | www.cclonline.com used Cloudflare to restrict access
Please enable cookies.
Error 1020
Ray ID: 64c0c2f1ccb5d781 • 2021-05-08 06:51:46 UTC
Access denied
What happened?
This website is using a security service to protect itself from online attacks.
我怎么解决这个问题?谢谢。
解决方案
我在抓取一个电子商务网站时遇到了同样的问题。显然,CloudFlare 会分析请求的 TLS 指纹并抛出 403 (1020) 代码,以防指纹与通常用于抓取的 node.js/python/curl 匹配。解决方案是模拟一些流行浏览器的指纹 - 最明显的方法是使用 Puppeteer.js 和puppeteer 额外的隐形插件。但是..由于 Puppeteer 对我的用例来说不够快(我说得委婉些。。Puppeteer在资源和迟缓方面很疯狂)我不得不构建一个使用无聊SSL 的类似 curl 的实用程序- 并且因为编译 C/C++ 代码对于大多数 Web 开发人员来说,找出一些 TLS 库的隐蔽编译错误并不好玩——我将它包装成一个 API 服务器,你可以在这里尝试:https://rapidapi.com/restyler/api/scrapeninja
推荐阅读
- javascript - html-to-react:如何在保留样式的同时用 React 组件替换所有“img”元素?
- mysql - 如果某些值出现在另一个表中,则将值插入表中
- java - 是否可以仅使用除法、休息和递归将 int 打印为二进制?
- python - Python 静态不可变属性
- ckeditor - CKEditorError:track-changes-adapter-missing-getsuggestion:适配器未设置或缺少`getSuggestion()`方法
- android - Android TV 如何显示数字键盘?
- asp.net-core - 如何启用登录已发布的 asp.net Core 项目?
- outlook - 对于特定用户,使用 MailKit 对 Office 365 Outlook IMAP 进行身份验证失败
- ios - 如何在应用程序快速终止/终止/暂停时调用方法
- javascript - 在 .map() 函数中反应递增变量