请教用python urllib库爬虫模拟登陆启信宝遇到json格式的请求,怎么解决?

网络老鼠 2018-03-16 07:43:10
我只是想模拟登陆,然后爬取返回的首页,我已经添加了浏览器头信息等数据,关键是提交的用户密码是json格式,不知道我写的代码对不对?网上查了应该用json.dumps()封装,但还是返回500错误。
用F12分析的登录请求:
{acc: "13961700000", pass: "12345", captcha: {isTrusted: true}}
点击"view source"显示:{"acc":"13961700000","pass":"12345","captcha":{"isTrusted":true}}
多个几个引号,不知道啥回事。

我的代码如下:

import urllib.request
import urllib.error
import json
url = "http://www.qixin.com/api/user/login"
postdata ={"acc":"13961740000","pass":"12345","captcha":{"isTrusted":True}}
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36"}
headers["Referer"]="www.qixin.com"
headers["Host"]="www.qixin.com"
headers["Accept-Encoding"]="gzip, deflate"
headers["Accept-Language"]="zh-CN,zh;q=0.9"
headers["dc49417fe4f34f86b0fe"]="25c5e641e251292018090b3407797217f8c779abc6ca19dfda2706c53e0d784a4bd768b38e83732691cec6b1d2000aa6925e05b29338e02230922ae0c37c633a"
headers["Content-Type"]="application/json;charset=UTF-8"
headers["Origin"]="http://www.qixin.com"
headers["X-Requested-With"]="XMLHttpRequest"
req = urllib.request.Request(url,json.dumps(postdata).encode(encoding='UTF8'),headers,method='POST')
print("开始爬取...")
try:
data=urllib.request.urlopen(req).read()
print(len(data))
fh=open(r"C:\Users\emouse\Desktop\test.html","wb")
fh.write(data)
fh.close()
except urllib.error.URLError as e:
if hasattr(e,"code"):
print(e.code)
if hasattr(e,"reason"):
print(e.reason)


请大神们指点!!!
...全文
737 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_43887073 2019-08-15
  • 打赏
  • 举报
回复
这种单挑数据模拟爬取毫无意义,启信宝的几个反爬点还是有点意思的
oyljerry 2018-03-17
  • 打赏
  • 举报
回复
引用 3 楼 cracker_xu 的回复:
[quote=引用 2 楼 oyljerry的回复:]可以直接对比浏览器提交的数据格式,然后看你代码的格式是否一样的
感谢回复,我用fiddle抓包看了,发送的格式和内容都一样,但就是不行,返回500,未知错误。[/quote] 500是服务器错误,是不是触发了服务器代码的什么bug
网络老鼠 2018-03-16
  • 打赏
  • 举报
回复
引用 2 楼 oyljerry的回复:
可以直接对比浏览器提交的数据格式,然后看你代码的格式是否一样的
感谢回复,我用fiddle抓包看了,发送的格式和内容都一样,但就是不行,返回500,未知错误。
oyljerry 2018-03-16
  • 打赏
  • 举报
回复
可以直接对比浏览器提交的数据格式,然后看你代码的格式是否一样的
sanGuo_uu 2018-03-16
  • 打赏
  • 举报
回复
摸着良心讲,模拟登录我就没成功过。 不过有另一个思路(我似乎是成功过的) 你直接登录,查看返回的页面 打开F12看cookie(谷歌的是在:Application-Storage-Cookies)找到对应域名,把所有的cookie都抄下来; 当然你也在返回的页面时,看Network里面的页面加载。应该在页面的response里面,直接会有返回的cookie 这个cookie就是标识你已经登录了。 然后你用python写,请求首页,把cookie加在header里面,返回的页面就是登录状态的页面了。

37,718

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧