【问题标题】:Python HTTP Request gets blockedPython HTTP 请求被阻止
【发布时间】:2021-01-05 07:12:31
【问题描述】:

我一直试图通过一个请求,其中第一页是数学演算,以传递到主页。这部分解决了。但是,当我尝试获得其他东西时,我得到以下信息:

<script>
window.location.reload();
</script>

我已经学了一段时间了,但现在我才第一次尝试:

import re
import requests


def login_tokyo(s):
    r = s.get('https://apcis.tmou.org/public/')
    str_number = re.findall("<span[^>]+(.*?)</span>", r.text)[0]
    numbers = re.findall('[0-9]+', str_number)
    captcha = int(numbers[0]) + int(numbers[1])
    payload = {'captcha': captcha}
    r = s.post('https://apcis.tmou.org/public/?action=login', data=payload)
    check_text = re.findall('<b>(.*?)</b>', r.text)[0]
    print(check_text)
    payload1 = {'Param': 0, 'Value': 5797164, 'imo': '', 'callsign': '', 'name': '', 'compimo': 5797164,
                'compname': '', 'From': '01.06.2020', 'Till': '31.08.2020', 'authority': 0, 'flag': 0, 'class': 0,
                'ro': 0, 'type': 0, 'result': 0, 'insptype': -1, 'sort1': 0, 'sort2': 'DESC', 'sort3': 0,
                'sort4': 'DESC'
                }
    r = s.post('https://apcis.tmou.org/public/?action=getcompanies', data=payload1)
    perf_tm = re.findall("<p class=[^>]+(.*?)</p>", r.text)
    print(r.text)
    print(perf_tm)

if __name__ == '__main__':
    with requests.Session() as s:
        login_tokyo(s)

print(check_text) 告诉我我在主页上,但是……什么也没有。根据这个特定的请求,我希望 print(perf_tm) 能够让我得到中等。 感谢所有帮助!

【问题讨论】:

  • 你需要抓取哪些信息?
  • 我喜欢网站上的数学问题验证码,它们和拼写一样有效。
  • 我正在努力刮掉公司的业绩@ZarakiKenpachi
  • 顺便说一句,我强烈建议使用 postman/insomnia 手动测试请求并检查哪些标头是必需的,哪些不是。
  • 如果你像我一样懒惰,只需将浏览器中网络选项卡中的请求复制为 cURL 请求并将其粘贴到此处:curl.trillworks.com

标签: python html regex httprequest


【解决方案1】:

编辑:

没关系,我错了,会话应该处理所有 cookie,好像网站拒绝了没有用户代理的浏览器的请求,只需这样做:


def login_tokyo(s):
    header={'User-Agent':''}
    s.headers.update(header)
    r = s.get('https://apcis.tmou.org/public/')
    str_number = re.findall("<span[^>]+(.*?)</span>", r.text)[0]
    ...

原答案:

您没有处理PHPSESSID cookie,许多网站使用它来跟踪登录服务器端,尝试这样做


def login_tokyo(s):
    header={'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.','Cookies':'PHPSESSID=xxxxxxxxxxxxxxxxxxxxxxxxxxxx'}
    s.headers.update(header)
    r = s.get('https://apcis.tmou.org/public/')
    str_number = re.findall("<span[^>]+(.*?)</span>", r.text)[0]
    ...

如果您不想手动处理 cookie,您也可以使用 cookielib(更多信息在此 question),尽管大多数服务器不关心 sessionid 集是否已经在他们的数据库中,并且会接受任何随机 sessionid。

【讨论】:

  • 这就像一个魅力。感谢您确定问题。我一定会更多地了解它以更好地理解它。
猜你喜欢
  • 1970-01-01
  • 2015-12-17
  • 1970-01-01
  • 2019-10-11
  • 2013-05-28
  • 1970-01-01
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多