python练习-爬虫(续)
流程:
1 设置url
2 设置消息头
3 设置消息体
4 获取响应
5 解析相应
6 验证数据
接下来就是查询数据了。
# 识别图片中的文字 #image = Image.open('captcha.png') image = Image.open('G:\Python爬虫\captcha.png') code = pytesseract.image_to_string(image) # 从用户输入获取用户名、身份证号码和验证码 username = 'XXX' # input("请输入用户名:") id_card = '123456789012345678' #input("请输入身份证号码:") ip = '1.1.1.1' # 构造查询所需的数据 data = { "pusername":username, "idcard": id_card, "ip":ip, "verifycode": code.strip() } print(data) # 发送查询请求 response = requests.post("http://xyz/xyinfo.do?method=query", data=urllib.parse.urlencode(data, encoding='gb2312'), headers=headers4query) # 输出查询结果 print(response.text) print(data)
这里一个坑,请注意:
通过抓取包,发现发送的:
pusername=%D0%EC%123A%E131C%C120%B121C&idcard=323123123121231231&ip=1.1.1.1&verifycode=3313
是gb2312。在程序中也要进行对应转换。语句如下:
response = requests.post("http://xyz/xyinfo.do?method=query", data=urllib.parse.urlencode(data, encoding='gb2312'), headers=headers4query)
同时注意header中:'Content-Type': 'application/x-www-form-urlencoded;charset=gb2312',不要改成其它格式。
goodluck
补课:
四种编码方式如下,在header中设置:
1、application/x-www-form-urlencoded
POST http://www.example.com HTTP/1.1
Content-Type:application/x-www-form-urlencoded;charset=utf-8
2、multipart/form-data
POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data;
3、application/json
4、text/xml
post请求四种传送正文方式:
- 请求正文是
application/x-www-form-urlencoded
- 请求正文是
multipart/form-data
- 请求正文是
raw
- 请求正文是
binary