scrapy 如何刮网站保护的cloudfare

bqf10yzr  于 2022-11-09  发布在  其他
关注(0)|答案(2)|浏览(384)

所以我试着把https://craft.co/tesla
当我从浏览器访问时,它会正确打开。但是,当我使用Scrapy时,它会获取站点,但当我查看响应时,

view(response)

它显示的是cloudfare站点,而不是实际的站点。
我该怎么办?

jobtbby3

jobtbby31#

Cloudflare会定期改变他们的技术,无论如何,你只要使用一个简单的Python模块就可以绕过Cloudflare的反机器人页面。如果你想抓取或爬取一个受Cloudflare保护的网站,这个模块会很有用。Cloudflare的反机器人页面目前只检查客户端是否支持Javascript,尽管他们可能会在未来增加额外的技术。
由于Cloudflare不断更改和强化其保护页面,cloudscraper需要JavaScript引擎/解释器来解决Javascript挑战。这使得脚本可以轻松模拟普通的Web浏览器,而无需显式地去模糊和解析Cloudflare的Javascript。
任何使用cloudscraper的脚本在第一次访问任何启用了Cloudflare反机器人的站点时都会休眠约5秒,但在第一次请求后不会发生延迟。

  • [https://pypi.python.org/pypi/cloudscraper/]

请检查此python模块。
使用cloudscraper最简单的方法是调用create_scraper()。

import cloudscraper

scraper = cloudscraper.create_scraper()  # returns a CloudScraper instance

# Or: scraper = cloudscraper.CloudScraper()  # CloudScraper inherits from requests.Session

print(scraper.get("http://somesite.com").text)  # => "<!DOCTYPE html><html><head>..."

任何从这个会话对象向受Cloudflare防机器人保护的网站发出的请求都将被自动处理。没有使用Cloudflare的网站将被正常处理。您不需要进一步配置或调用任何东西,您可以有效地处理所有网站,就像它们没有受到任何保护一样。
使用cloudscraper的方式与使用Requests的方式完全相同。cloudScraper的工作方式与Requests Session对象相同,只是调用scraper.get()或requests.post()而不是requests.get()或scraper.post()。

piwo6bdm

piwo6bdm2#

使用requests-HTML .你可以使用下面的代码来避免阻塞:

url = 'your url come here'
s = HTMLSession()
s.headers['user-agent'] = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'
r = s.get(url)
r.html.render(timeout=8000)
print(r.status_code)
print(r.content)

相关问题