Python - 请求被Cloudflare阻止

时间:2018-03-03 18:56:55

标签: python python-3.x

我正在尝试登录网站。当我看到print(g.text)时,我没有回到我期望的网页,而是一个cloudflare页面,上面写着“在访问之前检查浏览器”

import requests
import time

s = requests.Session()
s.get('https://www.off---white.com/en/GB/')

headers = {'Referer': 'https://www.off---white.com/en/GB/login'}

payload = {
    'utf8':'✓',
    'authenticity_token':'',
    'spree_user[email]': 'EMAIL@gmail.com',
    'spree_user[password]': 'PASSWORD',
    'spree_user[remember_me]': '0',
    'commit': 'Login'
}

r = s.post('https://www.off---white.com/en/GB/login', data=payload, headers=headers)

print(r.status_code)

g = s.get('https://www.off---white.com/en/GB/account')

print(g.status_code)
print(g.text)

为什么在我设置会话时会发生这种情况?

3 个答案:

答案 0 :(得分:5)

您可能想尝试一下:

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>..."

它不需要Node.js依赖项。 所有学分归this pypi page

答案 1 :(得分:2)

这是因为该页面使用了Cloudflare的反机器人页面(或IUAM)。
由于Cloudflare会定期更改其技术,因此绕过此检查很难自行解决。目前,他们检查客户端是否支持JavaScript,这可能是欺骗性的 我建议使用cfscrape模块绕过这个。
要安装它,请使用pip install cfscrape。您还需要安装Node.js 您可以将请求会话传递到create_scraper(),如下所示:

session = requests.Session()
session.headers = ...
scraper = cfscrape.create_scraper(sess=session)

答案 2 :(得分:1)

我遇到了同样的问题,因为他们在api中实现了cloudfare,我是这样解决的

import cloudscraper
import json
scraper = cloudscraper.create_scraper()
r = scraper.get("MY API").text 
y = json.loads(r)
print (y)