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

2020-07-30 12:23:17 +08:00
 xxdd135

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

查询页面

结果页面

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

2311 次点击
所在节点    Python
13 条回复
rimutuyuan
2020-07-30 12:30:54 +08:00
chrome F12 network 界面,在对应的请求上右键 copy,copy as curl(bash)。

然后在这个网站 https://curl.trillworks.com/ 转换成 requests 代码
sadfQED2
2020-07-30 12:39:08 +08:00
@rimutuyuan 有点秀,居然还有这种东西
xxdd135
2020-07-30 12:42:02 +08:00
@rimutuyuan 我如果换一个人,是要再去 copy 一遍吗?可不可以通过查询页面输入对应的信息得到 cookie,再用这 cookie 得到结果呢?
masker
2020-07-30 12:43:10 +08:00
伸手党这么严重了吗。
lxk11153
2020-07-30 12:43:41 +08:00
竟然可以查别人的成绩。。(隐私没了。
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
2020-07-30 12:56:16 +08:00
@masker 嘛,确实是伸手党,只是我自己写的不知道为什么不行!https://i.bmp.ovh/imgs/2020/07/7caff8479c350678.png
@lxk11153 只是练练手,实在想不出来了
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
2020-07-30 13:31:39 +08:00
发个人信息最好名字打个码,还有图里这位小朋友高中退步的有点多啊 hh
xxdd135
2020-07-30 14:38:47 +08:00
@rimutuyuan
@hakono
@polaa
感谢各位大神!原本我直接 post 查询接口,拿得到的 cookie 去访问返回的获取成绩的 url,少了最开始访问查询页的 set-cookie (一直都不知道 set-cookie 的存在,上学期也爬过成绩,不过那时候反爬虫力度没那么强),怪不得访问获取成绩的 url 时老是叫我从查分主页登陆,于是按着 @hakono 的流程改了改代码就 OK 了
dingwen07
2020-07-30 14:51:02 +08:00
用 requests.Session() 不用手动处理 cookie
Vegetable
2020-07-30 14:54:29 +08:00
这你不得有全校的名字吗?
xxdd135
2020-07-30 14:57:39 +08:00
@dingwen07 用上了
@Vegetable

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/694305

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX