本帖最后由 hj170520 于 2020-5-11 16:28 编辑
书接上文,https://www.52pojie.cn/thread-1171440-1-1.html
早上用的selenium包来完成的自动签到,下午看来有些大佬说request做很快。我还要感谢我的一位学JAVA的同学,尽管他也不太懂python,但是他还是在关键的地方帮到我了 。我是做出来了,但我花了一下午
我是小白,啥也不懂,requests的原理也不懂,逛知乎看了个答案觉得很好 https://www.zhihu.com/question/21471960/answer/100866141
(借用的图)
原理就:上传了几个参数到服务器
一个是 first =true, 一个是kd = android, (关键字) 一个是pn =1 (page number 页码)
构造一个数据包来模拟用户的点击动作。
[Python] 纯文本查看 复制代码 post_data = {'first':'true','kd':'Android','pn':'1'}
然后使用python中库中最简单的requests库来提交数据。 而这些数据 正是抓包里看到的数据。
[Python] 纯文本查看 复制代码 import requests
return_data=requests.post("http://www.lagou.com/jobs/posi ... ot%3B,data=post_data)
print return_data.text
返回来的json数据,再对它进行处理
我靠,到这一步我有点懂了,就是我假装是隔壁老王,到隔壁家去做羞羞的事。
所以,我该提交什么数据呢?我看这个熟悉的POST,我好像在哪见过。Fiddle 和 免流见过,
然后我打开了我的Charles
打开我们上午的网页http://*********/dailyReportAllZ/#/?PersonID=+学号 (学号我就不提供了。我不,能出卖同学)
按顺序看了一下“提交”和“返回”的数据。顺序依次是getMD5, getinfo, submit
getMD5
getinfo
submit
然后我发现了规律,需从getMD5到getinfo最后到submit
因为getMD5返回的"data" = "md5"(出现在getinfo)最后getinfo出现在了submit发送框里
所以我开始写代码了。 我直接把代码放出来把
[Python] 纯文本查看 复制代码 import json
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15'
}
url_MD5 = "*********"
url_info = "*********"
url_submit = '*********'
cardId = input('你的学号:')
my_data = {"cardId": cardId}
res_MD5 = requests.request("post", url_MD5, headers = headers, data = my_data).text #取到了对方发回来的json文件
res_MD_dict = json.loads(res_MD5) #loads:把json转换为dict 便于把数据单独取出来
MD5 = res_MD_dict["data"]
my_data["md5"] = MD5
res_info = requests.request("post", url_info, headers = headers, data = my_data).text
res_info_dict = json.loads(res_info) #loads:把json转换为dict 便于把数据单独取出来
# print(res_info_dict) 检测出json.loads输出的空值为null
list = res_info_dict["data"]["list"] #层层剥开,名字要对准 输出的文件格式是"list"
# print(list) 检测出转化后的null变成了none
list_dict = dict(list[0]) # list输出之后转dict,这一步很关键,费了不少时间
data_submit = {}
data_submit["bh"] = list_dict["bh"]
data_submit["xykh"] = list_dict["xykh"]
data_submit["twfw"] = list_dict["twfw"]
data_submit["sfzx"] = list_dict["sfzx"]
data_submit["sfgl"] = list_dict["sfgl"]
data_submit["szsf"] = list_dict["szsf"]
data_submit["szds"] = list_dict["szds"]
data_submit["szxq"] = list_dict["szxq"]
data_submit["sfcg"] = list_dict["sfcg"]
data_submit["bllb"] = list_dict["bllb"]
data_submit["sfjctr"] = list_dict["sfjctr"]
data_submit["sbr"] = list_dict["sbr"]
data_submit["sjd"] = 0
# for keys in list_dict:
# my_data[keys] = list_dict[keys] #想做去除none的循环,最后发现不会。。。。。
# for values in my_data.values():
# if values == None:
# values = [0]
res_submit = requests.request("post", url_submit, headers = headers, data = data_submit).text
print(res_submit)
我说实话,我最后把my_data这个dict把所有变量发送出去返回来是失败的,最后从my_data把需要的几个变量拿出来发送就成功了。我很奇怪。
有大佬帮忙作个解释吗? 以及有需要改进的地方,你们直说,我太需要被你们批评了。 |