【问题标题】:Scrape Website protected by Cloudflare without cookies using Python and Requests使用 Python 和 Requests 抓取受 Cloudflare 保护的网站,无需 cookie
【发布时间】:2022-07-25 07:08:55
【问题描述】:

通常当网站受到 cloudflare 保护时,它们会从第一个请求中加载一个带有值的 cookie,因此当您尝试获取它时,它会返回 403 禁止访问。

这个网站Oddschecker 是一个体育赔率聚合器,做事不同。

在私人会话中检查,您可以看到标头不包含任何 cookie 也不包含对 cloudflare 的任何引用

然而,这是我的代码

headers = {
  'authority': 'www.oddschecker.com',
  'upgrade-insecure-requests': '1',
  'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36',
  'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
  'sec-gpc': '1',
  'sec-fetch-site': 'none',
  'sec-fetch-mode': 'navigate',
  'sec-fetch-user': '?1',
  'sec-fetch-dest': 'document',
  'accept-language': 'es-ES,es;q=0.9'}

url = "https://www.oddschecker.com/"

session=cloudscraper.create_scraper()
response=session.get(url=url, headers=headers)

并且响应具有 403 状态。这是为什么?如果 cloudflare 没有为它加载任何 cookie 并且我正在使用旨在接受 JS 加载的库,cloudflare 如何阻止我访问?

这是 Postman 中响应的 sn-p(也是 403)

只是因为,我试图在那里重新创建 POST 请求,所以我做到了

url="https://sparrow.cloudflare.com/api/v1/event"
payload={'event':"feedback clicked",'properties':{'errorCode':1020,'version':2}}
headers={'Content-Type':"application/json","Sparrow-Source-Key":"c771f0e4b54944bebf4261d44bd79a1e"}

r=sesion.post(url=url,headers=headers,data=json.dumps(payload))

r.headers --> {'Date': 'Tue, 22 Mar 2022 23:19:25 GMT', 'Content-Type': 'text/plain;charset=UTF-8', 'Content-Length': '9', 'Connection': 'keep-alive', 'Access-Control-Allow-Origin': 'https://sparrow.cloudflare.com', 'Vary': 'Origin, Accept-Encoding', 'access-control-allow-headers': 'Content-Type, Sparrow-Client-ID, Sparrow-Source-Key, Origin', 'access-control-allow-methods': 'POST, OPTIONS', 'access-control-max-age': '600', 'Expect-CT': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', 'Server': 'cloudflare', 'CF-RAY': '6f02a6f2f8a9668f-MAD'}

有趣的是,这个确实返回了 200,它的 r.contentb"Filtered.",我不知道这是否意味着什么。

那么,我该怎么做呢?它是怎么把我赶出去的?

别害羞了

【问题讨论】:

    标签: python-3.x python-requests cloudflare


    【解决方案1】:

    有什么新的吗?我猜您尝试过 python 的 cloudcraper 库来执行请求,不是吗?它在一个有 cloudcrapper 的网站上为我工作,但现在不行,但你可以试试。由于声誉问题,无法发表评论,如果您成功了,希望听到消息

    【讨论】:

      猜你喜欢
      • 2022-01-07
      • 2015-07-01
      • 1970-01-01
      • 2019-04-26
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 2023-04-04
      相关资源
      最近更新 更多