文章目录
- urllib
- urllib.request模块
- request对象
- Response对象
- urllib.parse模块
- parse.quote()
- parse.urlencode() & parse.parse_qs()
- urlparse() & urlsplit()
- urllib.error模块
- urllib.robotparse模块
- urllib3
- 构造请求
- Response content
- JSON content
- Binary content
- Proxies
- Request data
- Headers
- Query parameters
- Form data
- JSON
- Files & binary data
- 爬虫一般开发流程
- 例
- 注
urllib
- urllib是一个用来处理网络请求的Python标准库,包含四个模块
- urllib.requests:请求模块,用于发起网络请求
- urllib.parse:解析模块,用于解析URL
- urllib.error:异常处理模块,用于处理request引起的异常
- urllib.robotparse:用于解析robots.txt文件
urllib.request模块
- request模块主要负责构造和发起网络请求,并在其中添加Headers,Proxy等
- 利用它可以模拟浏览器的请求发起过程
- 作用:
- 发起网络请求
- 添加Headers
- 操作cookie
- 使用代理
urlopen方法
urllib.request.urlopen(url,data=None,[timeout,]*,cafile=None,capath=None,cadefault=False,context=None)
- urlopen是一个简单发送网络请求的方法,他接收一个字符串格式的url,他会向传入的url发送网络请求,然后返回结果,返回的是 http.client.HttpResponse 对象,这个对象是类文件句柄对象
from urllib import request,parse #urllib是包
#发送一个get请求 ok
response = request.urlopen(url="http://httpbin.org/get") #测试接口
- urloprn默认会发送get请求,当传入data参数时,则会发起POST请求,data参数是字节类型,或者类文件对象或者可迭代对象
#发送post请求
print(response.getcode()) #状态码
print(response.info())
print(response.read()) #读取网页源代码,以字节形式返回
print(response.readline()) #读一行
print(response.readlines()) #读多行
response2 = request.urlopen(
url = ‘http://httpbin.org/post’,
data = b’username=xiaoge&password=123456’
)
- 还可以设置超时,如果请求超过设置时间,则抛出异常
- timeout没有指定则用系统默认设置,timeout只对http,https以及ftp连接起作用
- 它以秒为单位,比如可以设置timeout=0.1超过时间为0.1秒
response = request.urlopen(url=“http://httpbin.org/get”,timeout=0.1)
urlretrieve 方法
from urllib import request
request.urlretrieve('http://www.baidu.com','baidu.html')
request对象
- 利用openurl可以发起最基本的请求,但这几个简单的参数不足以构建一个完整的请求,可以利用更强大的Request对象来构建更加完整的请求
headers = {
'User-Agent' : '填请求头'
}
req = request.Request(‘http://www.baidu.com',headers=headers)
response = request.urlopen(req)
print(response.read())