V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
xxdd135
V2EX  ›  Python

求教 requests 怎么获取到这个网站的内容

  •  
  •   xxdd135 · 2020-07-30 12:23:17 +08:00 · 2286 次点击
    这是一个创建于 1372 天前的主题,其中的信息可能已经有所发展或是发生改变。

    刚学 python,学校发了成绩在查询网站上,想把全校的成绩爬下来,分析完网页后写了好多次代码都不行,网页如下

    查询页面

    查询页面

    结果页面

    结果页面

    查询页面点击确定后触发 js 函数发送 POST 请求,验证信息正确就用 location.href 跳转到结果页面,整个过程貌似是用 cookie 里的 PHPSESSID 来记录信息的(结果页面会检测 header 里的 Referer ),这个用 requests 怎么实现呢?

    第 1 条附言  ·  2020-07-30 14:55:12 +08:00
    • 已解决
    rimutuyuan
        1
    rimutuyuan  
       2020-07-30 12:30:54 +08:00   ❤️ 1
    chrome F12 network 界面,在对应的请求上右键 copy,copy as curl(bash)。

    然后在这个网站 https://curl.trillworks.com/ 转换成 requests 代码
    sadfQED2
        2
    sadfQED2  
       2020-07-30 12:39:08 +08:00 via Android
    @rimutuyuan 有点秀,居然还有这种东西
    xxdd135
        3
    xxdd135  
    OP
       2020-07-30 12:42:02 +08:00
    @rimutuyuan 我如果换一个人,是要再去 copy 一遍吗?可不可以通过查询页面输入对应的信息得到 cookie,再用这 cookie 得到结果呢?
    masker
        4
    masker  
       2020-07-30 12:43:10 +08:00 via Android
    伸手党这么严重了吗。
    lxk11153
        5
    lxk11153  
       2020-07-30 12:43:41 +08:00
    竟然可以查别人的成绩。。(隐私没了。
    hakono
        6
    hakono  
       2020-07-30 12:50:56 +08:00
    1L 是最简单粗暴的方法我也经常用。很多时候我实在懒得去分析网站的登陆验证逻辑,或者 cookie 生成机理的话,十分好用

    回 3L:看了下你查询流程太简单了。访问查询页会返回 set-cookie 设置 cookie,然后带着 cookie 请求查询接口会返回一个获取成绩的 url,继续用 cookie 访问 url 就能获得成绩了。建议学一下 requests 怎么启用 cookie (我记得 requests 应该是能自己处理 cookie 的?)
    如果一个 cookie 有查询限制的话,那就每次都访问主页获取新的 cookie 呗
    xxdd135
        7
    xxdd135  
    OP
       2020-07-30 12:56:16 +08:00
    @masker 嘛,确实是伸手党,只是我自己写的不知道为什么不行!https://i.bmp.ovh/imgs/2020/07/7caff8479c350678.png
    @lxk11153 只是练练手,实在想不出来了
    polaa
        8
    polaa  
       2020-07-30 13:30:34 +08:00
    POST /public/checkcondition/sqcode/OsDcMnymMjMxfGViYTlkZTRlZTg2ZDM3YTdiNzI0MzU1OWY1ZjM2N2EwfDAxMTQ0NAO0O0OO0O0O.html HTTP/1.1
    Host: 011444.yichafen.com
    X-Requested-With: XMLHttpRequest
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    Referer: https://011444.yichafen.com/public/queryscore/sqcode/OsDcMnymMjMxfGViYTlkZTRlZTg2ZDM3YTdiNzI0MzU1OWY1ZjM2N2EwfDAxMTQ0NAO0O0OO0O0O.html
    Cookie: acw_tc=2f6a1f8d15960863133018949e48de37343c3804e6364e608e32afb094bcbc; PHPSESSID=mqpv3fqsmihf9hil8cfrkedqe3; scoremgr_teacher_code=011444; Hm_lvt_ca667b4e604f41172ad66175206437c5=1596086315; Hm_lpvt_ca667b4e604f41172ad66175206437c5=1596086315
    Content-Length: 48

    s_banji=1&s_xingming=%E4%BB%87%E8%8B%B1%E7%BF%B0

    ---

    response:
    HTTP/1.1 200 OK
    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Content-Type: application/json; charset=utf-8
    Date: Thu, 30 Jul 2020 05:29:42 GMT
    Expires: Thu, 19 Nov 1981 08:52:00 GMT
    Pragma: no-cache
    Strict-Transport-Security: max-age=86400
    X-Powered-By: PHP/5.4.45
    Content-Length: 81

    {"info":"\u67e5\u8be2\u6210\u529f","status":1,"url":"\/public\/queryresult.html"}

    ---

    GET /public/queryresult.html HTTP/1.1
    Host: 011444.yichafen.com
    Referer: https://011444.yichafen.com/public/queryscore/sqcode/OsDcMnymMjMxfGViYTlkZTRlZTg2ZDM3YTdiNzI0MzU1OWY1ZjM2N2EwfDAxMTQ0NAO0O0OO0O0O.html
    Cookie: acw_tc=2f6a1f8d15960863133018949e48de37343c3804e6364e608e32afb094bcbc; PHPSESSID=mqpv3fqsmihf9hil8cfrkedqe3; scoremgr_teacher_code=011444; Hm_lvt_ca667b4e604f41172ad66175206437c5=1596086315; Hm_lpvt_ca667b4e604f41172ad66175206437c5=1596086315
    yanfany
        9
    yanfany  
       2020-07-30 13:31:39 +08:00
    发个人信息最好名字打个码,还有图里这位小朋友高中退步的有点多啊 hh
    xxdd135
        10
    xxdd135  
    OP
       2020-07-30 14:38:47 +08:00
    @rimutuyuan
    @hakono
    @polaa
    感谢各位大神!原本我直接 post 查询接口,拿得到的 cookie 去访问返回的获取成绩的 url,少了最开始访问查询页的 set-cookie (一直都不知道 set-cookie 的存在,上学期也爬过成绩,不过那时候反爬虫力度没那么强),怪不得访问获取成绩的 url 时老是叫我从查分主页登陆,于是按着 @hakono 的流程改了改代码就 OK 了
    dingwen07
        11
    dingwen07  
       2020-07-30 14:51:02 +08:00
    用 requests.Session() 不用手动处理 cookie
    Vegetable
        12
    Vegetable  
       2020-07-30 14:54:29 +08:00
    这你不得有全校的名字吗?
    xxdd135
        13
    xxdd135  
    OP
       2020-07-30 14:57:39 +08:00
    @dingwen07 用上了
    @Vegetable
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   816 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 22:32 · PVG 06:32 · LAX 15:32 · JFK 18:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.