以下为个人在学习Python过程中做的笔记总结之爬虫常用库urllib
前言
urlib库为python3的HTTP内置请求库
urilib的四个模块:
- urllib.request:用于获取网页的响应内容
- urllib.error:异常处理模块,用于处理异常的模块
- urllib.parse:用于解析url
- urllib.robotparse:用于解析robots.txt,主要用于看哪些网站不能进行爬取,不过少用
一、urllib.request
urllib.request.urlopen(url,data=None,[timeout,]*,cafile=None,cadefault=False,context=None)
url:为请求网址
data:请求时需要发送的参数
**timeou**t:超时设置,在该时间范围内返回请求内容就不会报错
示例代码:
from urllib import request
# 请求获取网页返回内容
response = request.urlopen('https://book.douban.com/')
# 获取网页返回内容
print(response.read().decode('utf-8'))
# 获取状态码
print(response.status)
# 获取请求头
print(response.getheaders())
# 对请求头进行遍历
for i, j in response.getheaders():
print(i, '=', j)
可以使用上面的代码对一些网站进行请求了,但是当需要一些反爬网站时,这就不行了,这时我们需要适当地增加请求头进行请求,这时就需要使用复杂一点的代码了,这时我们需要用到Request对象。
代码示例:
# 请求头
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0'}
requests = request.Request('https://book.douban.com/', headers=headers) # 加入自己的请求头更加接近浏览器
# 进行请求,把Request对象传入urlopen参数中
response = request.urlopen(requests)
print(response.read().decode('utf-8'))
这个我添加了请求头进行请求,使机械爬虫模拟浏览器发送请求,更加接近人为的浏览。可以对应一些反爬网站了。
如果网站需要进行登陆,这时需要用到post方法,用上面的也是可以的。代码如下:
from urllib import request, parse
# 使用post方法来进行模拟登陆豆瓣
data = {
'source': 'None',
'redir': 'https://www.douban.com/',
'form_email': 'user',
'form_password': 'passwd',
'remember': 'on',
'login': '登录'}
# 将data的字典类型转换为get请求方式
data = bytes(parse.urlencode(data), encoding='utf-8')
requests = request.Request('https://accounts.douban.com/login'