urllib
urllib是Python标准库中最常用的Python网页访问的模块,它可以让用户像访问本地文本文件一样读取网页的内容。
Request模块
request模块主要用于打开和读取URL
使用前首先导入
from urllib import request
request模块定义了以下函数:
urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
用于打开统一资源定位地址 url,返回一个Response对象。
各参数的作用
url:(表示有效网址的字符串或Request对象)
data:(默认为None,以GET方式发送请求;当用户给出data参数的时候,改为POST方式发送请求)
timeout(可选参数):请求连接的等待时间,超时则抛出异常,以秒为单位。
cafile、capath:(为HTTPS请求指定了一组可信的CA证书,默认为None,一般不用)
cadefault:(默认为False,可忽略)
context:(描述各种SSL选项的SSLContext实例,默认为None,一般不用)
例如:
response = request.urlopen("https://www.baidu.com")
由于部分网站拒绝爬虫程序的连接请求,所以我们要设置User-Agent参数来隐藏身份,User-Agent存放于headers中,网站服务器就是通过查看User-Agent来判断访问者的信息。此时我们需要用到下面的Request来构造一个Request对象
Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
写个简单的例子
from urllib import request
header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) \
AppleWebKit/537.36 (KHTML, like Gecko) \
Chrome/78.0.3904.108 Safari/537.36"}#使用谷歌浏览器的User-Agent
req = request.Request("https://www.baidu.com", headers = header)
response = request.urlopen(req)
html = response.read().decode("utf-8")#read()返回bytes类型数据,需要对其解码,方便进一步的解析
#这一小段代码的作用是将网站的信息爬取下来
print(html)#输出查看爬取到的信息
Response对象
Response对象提供了如下方法:
read()、readline()、fileno()、close():这些方法的使用方式和文件对象完全一样。
info():返回一个httplib.HTTPMessage对象,表示远程服务器返回的头信息。
getcode():返回HTTP状态码。200表示请求成功。
geturl():返回请求的URL。