python 爬虫(学校选科)

2016-09-01 17:09:42 +08:00
 wudaown

https://wish.wis.ntu.edu.sg/webexe/owa/aus_schedule.main

现有学校某个网址,没有地方让我 post 数据。

用 chrome 观察了 network 也没有突破的地方。有一个 request header

不过在 urllib.request 和 urllib.parse.urlencode()里试过了。没有返回任何结果。

希望大家帮忙看看怎么爬去这个页面后面返回的所有数据。

谢谢大家了

3507 次点击
所在节点    Python
19 条回复
tumbzzc
2016-09-01 17:21:51 +08:00
没说清楚具体要什么
waterhhk
2016-09-01 17:22:10 +08:00
学校内网?
wudaown
2016-09-01 17:26:07 +08:00
@waterhhk 外面上不去么?
Shazoo
2016-09-01 17:32:37 +08:00
有啊。
导成 curl 的命令给你:
curl 'https://wish.wis.ntu.edu.sg/webexe/owa/AUS_SCHEDULE.main_display1' -H 'Pragma: no-cache' -H 'Origin: https://wish.wis.ntu.edu.sg' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: zh,en-US;q=0.8,en;q=0.6,zh-CN;q=0.4' -H 'Upgrade-Insecure-Requests: 1' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Cache-Control: no-cache' -H 'Referer: https://wish.wis.ntu.edu.sg/webexe/owa/aus_schedule.main' -H 'Connection: keep-alive' --data 'acadsem=2016%3B1&r_course_yr=ACC%3BGA%3B1%3BF&r_subj_code=Enter+Keywords+or+Course+Code&r_search_type=F&boption=CLoad&acadsem=2016%3B1&staff_access=false' --compressed
wudaown
2016-09-01 17:35:39 +08:00
@Shazoo 请问是怎么做到的?能稍微解释一下吗?另外 python 是实现能稍微说一下嘛?非常感谢
UnisandK
2016-09-01 17:37:58 +08:00
你是不是跳新窗口 network 没有东西。。刷新一下重新发送数据就有了
挺简单一个 post 连防爬虫都没做。。

wudaown
2016-09-01 17:38:35 +08:00
APPEND
不知道为什么不能 append 了

具体就是这里点了 Load Class Schedule



出现下面的这个页面的数据



就是 @Shazoo 做到的
laoyuan
2016-09-01 17:39:43 +08:00
这种弹出新标签页的,在新标签页点开发者工具然后刷新下,就能看到请求了。
wudaown
2016-09-01 17:41:50 +08:00
@laoyuan
@UnisandK
@Shazoo 我在新的窗口确实看到看到请求了,不过没有地方让我 post 啊,没有看到接口
laoyuan
2016-09-01 17:43:30 +08:00
点 Headers 看发送的数据,最下面 Form data
laoyuan
2016-09-01 17:45:16 +08:00
每年开学都要搞搞这一套,我上午还抓山大的课表好看空教室,结果选课系统的“本学期课程查询” 404 了,火大
wudaown
2016-09-01 17:45:33 +08:00
@laoyuan 看到了,所以不用类似 google 搜索这样的接口,直接一起 post 就可以?
wudaown
2016-09-01 17:47:51 +08:00
@laoyuan 然而还是不明白如何 python 实现
UnisandK
2016-09-01 17:49:56 +08:00
这不就是接口。。


这是 Pow 自动生成的 Python 实现
```python
# Install the Python Requests library:
# `pip install requests`

import requests


def send_request():
# Request
# POST https://wish.wis.ntu.edu.sg/webexe/owa/AUS_SCHEDULE.main_display1

try:
response = requests.post(
url="https://wish.wis.ntu.edu.sg/webexe/owa/AUS_SCHEDULE.main_display1",
headers={
"Content-Type": "application/x-www-form-urlencoded; charset=utf-8",
},
data={
"boption": "CLoad",
"r_search_type": "F",
"acadsem": "2016;1,2016;1",
"r_course_yr": "ACC;GA;1;F",
"r_subj_code": "Enter Keywords or Course Code",
"staff_access": "false",
},
)
print('Response HTTP Status Code: {status_code}'.format(
status_code=response.status_code))
print('Response HTTP Response Body: {content}'.format(
content=response.content))
except requests.exceptions.RequestException:
print('HTTP Request failed')



```
wudaown
2016-09-01 17:52:16 +08:00
@UnisandK pow 是什么东西,看起来好神奇
UnisandK
2016-09-01 17:53:47 +08:00
@wudaown HTTP 调试工具, 6L 图里那个
wudaown
2016-09-01 17:56:57 +08:00
@UnisandK 谢谢,估计够我研究一段时间了
Shazoo
2016-09-01 19:13:41 +08:00
额, 8 楼说的估计是你这边的根源问题。

找 post 指令啥的,都很简单啦。一看就懂。
pekingzcc
2016-09-02 10:34:43 +08:00
楼上上说的因该是 paw 吧

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

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

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

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

© 2021 V2EX