我正在尝试登录网站。当我看到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)
为什么在我设置会话时会发生这种情况?
答案 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)