BIDR中文网
你的位置:Tamadoge 中文站 > BIDR中文网 >
关于python爬虫模块urllib库详解
发布日期:2025-01-03 17:51 点击次数:182
1.urllib模块简介
python2有urllib和urllib2两种模块,都用来实现网络请求的发送。python3将urllib和urllib2模块整合并命名为urllib模块。urllib模块有多个子模块,各有不同的功能:
①urllib.request模块:用于实现基本的http请求。②urllib.error模块:用于异常处理。如在发送网络请求时出现错误,用该模块捕捉并处理。③urllib.parse模块:用于解析。④urllib.robotparser:用于解析robots.txt文件,判断是否可以爬取网站信息。
2.发送请求:urlopen()方法
urloprn() 方法由urllib.request模块提供,以实现基本的http请求,并接受服务器端返回的响应数据。
urlopen()语法: urllib.request.urlopen(url,data=None,[timeout,]*,cafile=None,capath=None,cadefault=False,context=None)
url:访问网站的完整url地址data:默认为None,表示请求方式为get请求;如果需要实现post请求,需要字典形式的数据作为参数。timeout:设置超时,单位为秒。cafile,capath:指定一组HTTPS请求信任的CA证书,cafile指包含单个证书的CA文件,capath指定证书文件的目录。cadefault:CA证书的默认值。context:描述SSL选项的 的实例。
3. 发送GET请求
代码示例
输出结果如下(部分):
response是一个<class ‘http.client.HTTPResponse’>对象;响应状态码也称响应码,也称状态码,可以通过status属性查看,也可以通过getcode()方法查看。getheaders()用于查看响应头所有信息getheader()中传入参数,用于查看响应头的指定信息。关于请求头&响应头当你使用http(https)协议请求一个网站的时候,你的浏览器会向对方的服务器发送一个http请求,这个请求同样包含三个部分请求方法 请求路径(URL) 请求协议版本例:GET https://www.google.com.hk/ HTTP/1.1报文主体(POST/GET)参数
当你向对方发送请求后,对方会回应你浏览器的请求,返回两个部分:响应头,Body
Body就是返回给你的主体,比如说请求网站返回的html 响应头讯息里包含了服务器的响应讯息,如http版本,压缩方式,响应文件类型,文件编码等
4.发送post请求
即在上边基础上,在urlopen()函数中写入data参数。
post请求会携带一些form表单数据,这个需要复制过来以字典形式写入。表单数据在网页上点击F12后,在Fetch/XHR一栏中的Payload中获取。以爬取有道翻译,翻译“你好”为例,此时的表单数据如下:
i: 你好from: AUTOto: AUTOsmartresult: dictclient: fanyideskwebsalt: 16417380413821sign: 6545acd2d928b39eb5bead9349a2d4fflts: 1641738041382bv: fdac15c78f51b91dabd0a15d9a1b10f5doctype: jsonversion: 2.1keyfrom: fanyi.webaction: FY_BY_REALTlME
代码示例如下:
另一个简单的示例:
5. 设置网络超时
urlopen()的timeout参数用于设置请求超时,该参数以秒为单位,表示如果在请求时超出了设置的时间还没有得到响应时就会抛出异常。
因为0.1秒设置的过快,结果因超时而产生异常,报错。
通常根据网络环境不同,设置一个合理的时间,如2秒,3秒。
对该网络超时异常进行捕捉并处理:
6. 复杂网络请求_urllib.request.Request()
urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
参数说明:
url:访问网站的完整url地址data:默认为None,表示请求方式为get请求;如果需要实现post请求,需要字典形式的数据作为参数。headers:设置请求头部信息,字典类型。origin_req_host:用于设置请求方的host名称或者IP。unverifiable:用于设置网页是否需要验证,默认值为False。method:用于设置请求方式,如GET,POST。
7.设置请求头
7.1get请求示例
7.2post请求示例
创建出一个Request对象,然后直接调用urlopen()函数。 创建Request也被称为创建请求对象。
8. Cookies的获取与设置
Cookies是服务器向客户端返回响应数据时所留下的标记。当客户再次访问服务器时会携带这个标记。一般登录一个页面成功后,会在浏览器的cookie中保留一些信息,再次访问时服务器核对后即可确认当前用户登录过,此时可直接将登录后的数据返回。
因为urlopen()方法不支持代理、cookie等其他的HTTP/GTTPS高级功能,所以这里不用urlopen()发送请求,而需要创建一个opener对象(这本来是urllib2中的方法)。示例如下。学习过程中这里作为了解即可,建议重点研究/使用requests库。
9.设置代理IP
10.异常处理
urllib模块中的urllib.error子模块包含了URLError与HTTPError两个比较重要的异常类。
10.1 URLError
URLError类提供了一个reason属性,可以通过这个属性了解错误的原因。示例如下:
程序运行结果:
10.2HTTPError
HTTPError类是URLError的子类,主要用于处理HTTP请求所出现的一次。此类有以下三个属性。
code :返回HTTP状态码reason 返回错误原因headers 返回请求头
结果如下(部分):
10.3URLError&HTTPError双重异常捕捉
因为URLError是HTTPError的父类,所以在捕获异常的时候可以先找子类是否异常,父类的异常应当写到子类异常的后面,如果子类捕获不到,那么可以捕获父类的异常。 URLError产生的原因主要是
网络没有连接,服务器连接失找不到指定的服务器。
当使用urlopen或 opener.open 不能处理的,服务器上都对应一个响应对象,其中包含一个数字(状态码),如果urlopen不能处理,urlopen会产生一个相应的HTTPError对应相应的状态码,HTTP状态码表示HTTP协议所返回的响应的状态码。
这里访问了一个真实存在的URL,输出结果为:
11.解析URL
urllin模块提供了parse子模块用来解析URL。
11.1 拆分URL
urlparse()方法
parse子模块提供了urlparse()方法,实现将URL分解成不同部分,语法格式如下:
urllib.parse.urlparse(urlstring,scheme=’’,allow_fragment=True)
urlstring:需要拆分的URL,必选参数。scheme:可选参数,需要设置的默认协议,默认为空字符串,如果要拆分的URL中没有协议,可通过该参数设置一个默认协议。allow_fragment:可选参数,如果该参数设置为False,则表示忽略fragment这部分内容,默认为True。
示例:
程序运行结果:
用此方法,除了返回ParseResult对象以外,还可以直接获取ParseResult对象中的每个属性值:
urlsplit()方法
urlsplit()方法与urlparse()方法类似,都可以实现URL的拆分。只是urlsplit()方法不再单独拆分params这部分内容,而是将params合并到path中,所以返回结果只有5部分内容。且返回的数据类型为SplitResult。
程序运行结果:
11.2 组合URL
urlunparse()方法
urlunparse()方法实现URL的组合 语法:urlunparse(parts) parts表示用于组合url的可迭代对象
程序运行结果:
urlunsplit()方法
同样用于URL组合,只是参数中的元素必须是5个。
程序运行结果
11.3 连接URL
用**urljoin()**方法来实现URL的连接。 urllib.parse.urljoin(base,url,allow_fragments=True)
base 表示基础链接url 表示新的链接allow_fragments 为可选参数,默认为Ture,设为False则忽略fragment这部分内容。
程序运行结果:
11.4 URL的编码与解码
使用urlencode()方法编码请求参数,该方法接收的参数值为字典。
示例
程序运行结果:
使用quote方法编码请求参数,该方法接收的参数值类型为字符串。
示例:
程序运行结果:
使用unquote()方法解码请求参数,即逆向解码。
示例:
程序运行结果:
11.5URL参数的转换
使用parse_qs()方法将参数转换为字典类型。
(其中query是前边拆分部分提到的拆分结果对象的一个属性)
程序运行结果:
使用parse_qsl()方法将参数转换为元组组成的列表
程序运行结果:
到此这篇关于关于python爬虫模块urllib库详解的文章就介绍到这了,更多相关python爬虫模块urllib库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!