文章目录
python爬虫:基本库(一)urllib
学习爬虫,最初的操作便是模拟浏览器向服务端发出请求,这里我们就学习使用urlib库的用法
使用urllib
首先,我们需要了解urllib库,它是python内置的HTTP请求库,也就是说不需要额外安装即可使用,它包含4个模块
request:它是最基本的HTTP请求模块,可以用来模拟发送请求。
error:异常处理模块。
parse:一个工具模块,提供了许多URL处理方法。
robotparser:主要时用来识别网站的robot.txt文件然后判断那些网站是否可以爬。
发送请求
urllib.request模块提供了最基本的构造HTTP请求的方法,urllib.request.urlopen(),若在获取请求对象时,不需要过多的参数传递,可以直接选择urllib.request.urlopen();如果需要加入Headers等信息请求则使用urllib.request.Request()。
1.urlopen()
这里我们以www.baidu.com为例,把这个网页抓取下来.
代码如下:
import urllib.request
response = urllib.request.urlopen('http://www.baidu.com')
print(response.read().decode('utf-8'))
添加data(附加数据)参数
data参数是可选的。如果要添加该参数,需要使用bytes()方法将参数转化为bytes类型。另外,如果传递了这个参数,则它的请求方式就不再是GET方式,而是POST方式。
实例:
import urllib.request
import urllib.parse
data = bytes(urllib.parse.urlencode({
'word': 'hello'}), encoding='utf-8')
response = urllib.request.urlopen('http://httpbin.org/post', data=data)
print(response.read())
我们传递的参数出现在了form字段中,这表明是模拟了以表单提交的方式,以POST方式传输数据,这里的
http://httpbin.org是一个提供HTTP请求测试的站点。
添加timeout(超时时间)参数
timeout参数用于设置超时时间,单位为s,如果请求超出了设置的这个时间还未响应,就会抛出异常。
实例:
import urllib.request
response = urllib.request.urlopen('http://httpbin.org/post', timeout=1)
print(response.read())
在爬取页面的过程中,若一个页面长时间无法响应将导致后续工作无法进行,所以设置timeout超时时间很有必要。
2.Request()
实例:
import