1
dsp2138 OP 具体 postdata 为啥那么长,我也很纳闷我是不是搞错了!
但这个网站竟然将网页全文做为一个变量用 js submit 传送了!! 大虾帮忙分析下,这个 URL 的 post 我这样做对不对! |
3
trotyl 2016-03-12 18:43:37 +08:00
你的 postdata 根本就没用过。。不懂你是要干什么。。
|
4
dsp2138 OP |
5
dsp2138 OP |
6
crab 2016-03-12 18:47:52 +08:00
__VIEWSTATE 这个参数值是动态的吧?
|
8
Strikeactor 2016-03-12 18:50:44 +08:00 1
|
9
dsp2138 OP @Strikeactor 我试试看
|
10
xuzywozz 2016-03-12 18:55:01 +08:00
heasers 不全?
|
12
bdbai 2016-03-12 21:23:19 +08:00 via iPhone
这一大串是 ASP.NET WebForm 生成的。你可以直接访问页面得到那串东西,然后模拟浏览器请求 POST 这样也许会好一点。
|
14
dsp2138 OP @bdbai 我大概也看明白了, cookies 里面的__CSRFCOOKIE ,和 data 里面的__CSRFTOKEN 是保持一致的!
只是__CSRFTOKEN 的 value 使用了 base64 加密,但又不完全是!__CSRFCOOKIE 的 base64 码和__CSRFTOKEN 不一致!正在琢磨呢 |
15
mhycy 2016-03-12 22:03:42 +08:00
能不能说说在干啥?发了那么多次代码没次对的。。。。囧
|
16
dsp2138 OP |
18
rcmerci 2016-03-12 22:15:14 +08:00
卧槽点进来吓尿了
|
19
just1 2016-03-12 22:15:38 +08:00 via Android
header 有的参数是不能加的
|
21
just1 2016-03-12 22:34:47 +08:00 via Android
@dsp2138 我也忘了,,,一个个测试吧。具体的情况就是 python 命令行下一个请求一直无反应(ctrl+c)也没用
|
22
mhycy 2016-03-12 22:47:42 +08:00
|
23
bdbai 2016-03-12 22:48:20 +08:00
|
24
mhycy 2016-03-12 22:49:41 +08:00
https://gist.github.com/anonymous/e837f2f5d9c6c57d7db8
貌似是 https 才能正常加载。。囧 |
25
awanabe 2016-03-12 22:59:35 +08:00
你给的是 dict , 要用 json dump 一下吧
|
26
Comdex 2016-03-12 23:06:40 +08:00
楼主在搞模拟登录正方教务系统?
|
27
dsp2138 OP /wEFJGY5NjIzYzdkLTI3OGQtNDliYy04YzJiLTNmMjZkODdlMTI1Yw==
和 f9623c7d-278d-49bc-8c2b-3f26d87e125c 是 base64 加密和解密的关系,但 /wEFJGY5NjIzYzdkLTI3OGQtNDliYy04YzJiLTNmMjZkODdlMTI1Yw==解密后开始的几个字符,怎么处理? 这个怎么用 base64 加密和还原? |
31
bdbai 2016-03-12 23:49:38 +08:00 via iPhone
@dsp2138 网页里面有个分页组件,用正则匹配一下就能读到分页数据了。上面给你写了一个直接读分页页面的。
|
34
mhycy 2016-03-12 23:55:27 +08:00
@dsp2138
看不到就不能留个言么。。囧 #coding=utf-8 import json import requests import re class spprec(object): def __init__(self, url): self.session = requests.session() self.session.headers.update({ 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36' }) self.url = url self.post_data = {} def getInfo(self, num): if len(self.post_data) == 0: res = self.session.get(self.url) else: self.post_data['__EVENTARGUMENT'] = num self.post_data["__EVENTTARGET"] = "MoreInfoList1$Pager" res = self.session.post(url=self.url, data=self.post_data) result = re.findall('<input type="hidden" name="([^"]+)" id="([^"]+)" value="([^"]+)" />', res.text, re.S) post_data = {} for item in result: post_data.update({item[0]: item[2]}) self.post_data = post_data result = re.findall('<a href="(/sczw/InfoDetail/Default.aspx[^"]+)" target="_blank" title="([^"]+)"', res.text, re.S) return result obj = spprec("http://www.spprec.com/sczw/jyfwpt/005001/005001001/MoreInfo.aspx?CategoryNum=005001001") for i in xrange(1, 5): data = obj.getInfo(i) for item in data: print item[1] |
35
mhycy 2016-03-13 00:01:41 +08:00 1
#coding=utf-8
import json import requests import re class spprec(object): \tdef __init__(self, url): \t\tself.session = requests.session() \t\tself.session.headers.update({ \t\t\t'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36' \t\t}) \t\tself.url = url \t\tself.post_data = {} \tdef getInfo(self, num): \t\tif len(self.post_data) == 0: \t\t\tres = self.session.get(self.url) \t\telse: \t\t\tself.post_data['__EVENTARGUMENT'] = num \t\t\tself.post_data["__EVENTTARGET"] = "MoreInfoList1$Pager" \t\t\tres = self.session.post(url=self.url, data=self.post_data) \t\tresult = re.findall('<input type="hidden" name="([^"]+)" id="([^"]+)" value="([^"]+)" />', res.text, re.S) \t\tpost_data = {} \t\tfor item in result: \t\t\tpost_data.update({item[0]: item[2]}) \t\tself.post_data = post_data \t\tresult = re.findall('<a href="(/sczw/InfoDetail/Default.aspx[^"]+)" target="_blank" title="([^"]+)"', res.text, re.S) \t\treturn result obj = spprec("http://www.spprec.com/sczw/jyfwpt/005001/005001001/MoreInfo.aspx?CategoryNum=005001001") for i in xrange(1, 5): \tdata = obj.getInfo(i) \tfor item in data: \t\tprint item[1] 缩进全没了,请自行替换吧,\t 对应 4 个空格或者一个 tab |
38
bdbai 2016-03-13 00:25:36 +08:00 via iPhone 1
|
39
mhycy 2016-03-13 00:29:33 +08:00 1
|
40
bdbai 2016-03-13 00:36:05 +08:00 via iPhone 1
|
41
dsp2138 OP @mhycy post 中__VIEWSTATE 和__CSRFTOKEN 不用管吗?后台没有对这里个 input 进行验证?
我提交的过程基本和你一致,但总是获取到的都是第一页 谢谢,在仔细看看你的源码 |
43
mhycy 2016-03-13 00:43:14 +08:00
|
45
dsp2138 OP @bdbai @mhycy
我也成功了! 发现自己还是对 requests 模块中的 session 不理解!! 发送的 cookies 有问题! @bdbai 这类的网站国内省级站又近十家都是同一家公司做的!因此界面报告导航分页的代码都是一致! ------------------------------- 我自己的代码 ---------------- import requests import json from bs4 import BeautifulSoup url='http://www.spprec.com/sczw/jyfwpt/005001/005001001/MoreInfo.aspx?CategoryNum=005001001' s = requests.session() s.headers.update({ 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36' }) r=s.get(url) soup=BeautifulSoup(r.text,'html5lib') __CSRFTOKEN=soup.find('input',id='__CSRFTOKEN').attrs['value'] __VIEWSTATE=soup.find('input',id='__VIEWSTATE').attrs['value'] __EVENTTARGET='MoreInfoList1$Pager' __EVENTARGUMENT=4 postdata={'__EVENTTARGET':__EVENTTARGET,'__EVENTARGUMENT':__EVENTARGUMENT,'__CSRFTOKEN':__CSRFTOKEN,'__VIEWSTATE':__VIEWSTATE} resp=s.post(url,postdata) |
48
dsp2138 OP 谢谢各位老师的及时回复
|
49
shyling 2016-03-13 09:56:31 +08:00 via iPad
viewstate 这么长是很正常的
|