【问题标题】:Python: Using requests for a webpage that redirectsPython:使用重定向网页的请求
【发布时间】:2017-06-28 12:11:43
【问题描述】:

更新:我确实在 API 中找到了我需要的信息,这并不是对这个特定问题的真正答案,而是我的软件的解决方案。

我正在尝试登录一个网页,导航到另一个页面,然后解析一个 HTML 表格。

如果您在未登录的情况下使用浏览器转到目标页面,它会将您带到默认登录页面,并且无论如何您都必须导航到目标页面。这就是为什么我有两个 URL 调用。

import requests

payload = {'username' : 'USER', 'password' : 'PASSWORD'}

with requests.Session() as s:
    p = s.post('login_url', data=payload)
    r = s.get('target_url')

当您导航到登录页面时,它通常会转到另一个页面以检查您的浏览器,然后再转到登录页面本身。我从“p”得到这个回复:

<span data-translate="checking_browser">Checking your browser before accessing</span> website.</h1>
<p data-translate="process_is_automatic">This process is automatic. Your browser will redirect to your requested content shortly.</p>
<p data-translate="allow_5_secs">Please allow up to 5 seconds…</p>

...这只是告诉您等待重定向并登录的页面。有没有办法处理这个问题,以便它等待可以登录的页面?我需要大约每 20 分钟在代码中调用一次,所以如果我可以保持登录状态并且只访问目标页面,那就更好了。

  • 理想的解决方案:在程序开始时登录一次并保持登录状态。
  • 更好的解决方案:每次重新登录,但要避免五秒钟的等待时间来换页。
  • 可接受的解决方案:每次登录前等待 5 秒重定向。

【问题讨论】:

  • 我们需要真实的网址来帮助您
  • 尝试使用stream = True,可能会让你进入。

标签: python html python-requests


【解决方案1】:

此“检查您的浏览器”消息看起来像 CloudFlare 功能,旨在阻止人们以这种方式访问​​该站点 - 您将需要从服务器运行一些 javascript 以通过此障碍(想法是有人访问浏览器中的网站将自动运行 javascript - 如果他们使用机器人来抓取网站,它将失败)

。如果该站点有 API,那么我的第一个建议是改用它。

否则,there are packages to help you get around this issue,但由于屏障明确阻止此类使用,因此当 CloudFlare 进行更改时,它们可能会停止工作。

【讨论】:

  • 好的,谢谢。他们确实有一个 API,我将其用于程序中的所有其他内容。我需要的只有一条信息没有在任何 API 响应中返回,因此我正在尝试另一种方法。
猜你喜欢
  • 2012-05-07
  • 2018-08-26
  • 2018-12-18
  • 1970-01-01
  • 1970-01-01
  • 2011-12-15
  • 2015-08-30
  • 1970-01-01
  • 2011-09-01
相关资源
最近更新 更多