-
Python爬虫连载3-Post解析、Request类
一、访问网络的两种方法
1.get:利用参数给服务器传递信息;参数为dict,然后parse解码
2.post:一般向服务器传递参数使用;post是把信息自动加密处理;如果想要使用post信息,需要使用到data参数
3.Content-Type:application/x-www.form-urlencode
4.Content-Length:数据长度
5.简而言之,一旦更改请求方法,请注意其他请求头信息相适应
6.urllib.parse.urlencode可以将字符串自动转换为上面的信息。
案例:利用parse模块模拟post请求分析百度翻译:分析步骤:
(1)打开谷歌浏览器,F12
(2)尝试输入单词girl,发想每敲击一个字母后都会有一个请求
(3)请求地址是:http://fanyi.baidu.com/sug
(4)打开network-XHR-sug
from urllib import request,parse #负责处理json格式的模块 import json """ 大致流程: (1)利用data构造内容,然后urlopen打开 (2)返回一个json格式的结果 (3)结果就应该是girl的释义 """ baseurl = "https://fanyi.baidu.com/sug" #存放迎来模拟form的数据一定是dict格式 data = { #girl是翻译输入的英文内容,应该是由用户输入,此处使用的是硬编码 "kw":"girl" } #需要使用parse模块对data进行编码 data = parse.urlencode(data).encode("utf-8") #我们需要构造一个请求头,请求头应该至少包含传入的数据的长度 #request要求传入的请求头是一个dict格式 headers = { #因为使用了post,至少应该包含content-length字段 "Content-length":len(data) } #有了headers,data,url就可以尝试发出请求了 rsp = request.urlopen(baseurl,data=data)#,headers=headers json_data = rsp.read().decode() print(json_data) #把json字符串转化为字典 json_data = json.loads(json_data) print(json_data) for item in json_data["data"]: print(item["k"],"--",item["v"])
二、为了更多的设置请求信息,单纯的通过urlopen函数已经不太好用了;需要利用request.Request类
这里只修改一部分代码,其他的代码都不变,依然可以得到相同的结果。
#构造一个Request的实例,就是借用这个类,来把能够传入的头信息进行封装扩展 req = request.Request(url=baseurl,data=data,headers=headers) #有了headers,data,url就可以尝试发出请求了 rsp = request.urlopen(req)#,headers=headers
三、源码
Reptile3_PostAnlysis.py
https://github.com/ruigege66/PythonReptile/blob/master/Reptile3_PostAnlysis.py
2.CSDN:https://blog.csdn.net/weixin_44630050
出 处:https://www.cnblogs.com/ruigege0000/p/12203832.html
最新更新
Objective-C语法之代码块(block)的使用
VB.NET eBook
Add-in and Automation Development In VB.NET 2003 (F
Add-in and Automation Development In VB.NET 2003 (8
Add-in and Automation Development in VB.NET 2003 (6
Add-in and Automation Development In VB.NET 2003 (5
AddIn Automation Development In VB.NET 2003 (4)
AddIn And Automation Development In VB.NET 2003 (2)
Addin and Automation Development In VB.NET 2003 (3)
AddIn And Automation Development In VB.NET 2003 (1)
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
武装你的WEBAPI-OData入门
武装你的WEBAPI-OData便捷查询
武装你的WEBAPI-OData分页查询
武装你的WEBAPI-OData资源更新Delta
5. 武装你的WEBAPI-OData使用Endpoint 05-09
武装你的WEBAPI-OData之API版本管理
武装你的WEBAPI-OData常见问题
武装你的WEBAPI-OData聚合查询
OData WebAPI实践-OData与EDM
OData WebAPI实践-Non-EDM模式