爬虫urllib and 正则总结

urllib:
是python自带抓取网页的其中的一种
urllib的三个属性:

request: 它是最基本的HTTP请求模块,可以用来模拟发送请求,就像在浏览器中输入网址,然后敲击回车键一样
error: 异常处理模块,如果出现请求错误,我们可以使用这个模块来捕获异常,然后进行重试或者其他操作,保证程序不会意外终止.
parse: 这一个工具模块,提供了许多url的处理方法,比如拆分,解析,合并

urllib里的urlopen的常见参数用法:

* url:设置目标url
* data:如果设置该参数,则请求默认为post请求
* timeout:用于设置超时时间,单位为秒
* context:必须是一个ssl.SSLContext类型,用来指定SSL设置,忽略未认证的CA证书

urilib的Request:
使用urlopen直接发送请求,获取一些反爬手段低的网站,有些网站会根据请求头来判断是否是浏览器访问,则需要增加HTTP报头,必须创建一个 Request 实例来作为urlopen()的参数;而需要访问的url地址则作为 Request 实例的参数。

* url 参数是请求链接,这个是必传参数,其他的都是可选参数。
* data(默认空) 参数跟 urlopen() 中的 data 参数用法相同。
* headers(默认空) 是一个字典。它除了在 Request 中添加,还可以通过调用 Reques t实例的 add_header() 方法来添加请求头。
* unverifiable 参数表示这个请求是否是无法验证的,默认值是False。意思就是说用户没有足够权限来选择接收这个请求的结果。例如我们请求一个HTML文档中的图片,但是我们没有自动抓取图像的权限,我们就要将 unverifiable 的值设置成 True。(这个参数我们不需要设置)
* method 参数指的是发起的 HTTP 请求的方式

urllib 的异常错误及错误处理
URLError:来自urllib库的error模块,继承自OSError,由request模块产生的异常都可以通过捕捉这个类来处理.
产生的原因主要有:

* 没有网络连接
* 服务器连接失败
* 找不到指定的服务器

它具有一个属性reason,返回错误的原因
HTTPError

* HTTPError是URLError的子类,我们发出一个请求时,服务器上都会对应一个response应答对象,其中它包含一个数字"响应状态码"。

* 专门用来处理HTTP请求错误,比如未认证,页面不存在等

* 有三个属性:

	* code:返回HTTP的状态码
	* reason:返回错误原因
	* headers:返回请求头

具体使用,因为HTTPError的父类是URLError,所以我们更好的处理顺序应该是先捕获子类的错误,再捕获父类的错误

parse模块下常用的url解析、合并、编码、解码方法
用时先导入

from urllib import parse

parse里面的几种用法:

urlencode()将字典构形式的参数序列化为url编码后的字符串
parse_qs()将url编码格式的参数反序列化为字典类型
quote()可以将中文转换为URL编码格式
unquote:可以将URL编码进行解码
urljoin()传递一个基础链接,根据基础链接可以将某一个不完整的链接拼接为一个完整链接
urlparse()实现URL的识别和分段
urlunparse()可以实现URL的构造

正则的用法:
匹配单个字符

.  匹配除了换行符之外的任意字符

\d 匹配数字0-9   =>[0-9]  => ^\D
\D 匹配非数字
\s 匹配空白字符(空格 \n \r \t)
\S 匹配非空白字符
\w 匹配单词字符[a-zA-Z0-9_]
\W 匹配非单词字符
^  以...开头
$  以...结尾
[0-9a-z] :表示匹配数字0~9,字母a~z
[^a-z] : 不匹配a-z之间的字符

#多字符匹配,贪婪模式

* 匹配*号前的字符任意次数
+ 匹配+号前的字符至少一次
?匹配?号前的字符0~1次

#多字符匹配,非贪婪模式 (abcdeabcde) e

*?
+?
??
|  或
() 分组

正则的五种用法:

re.match():匹配字符串的开头,有符合正则规则则子串,返回结果match对象,
没有匹配到结果,返回None,单次匹配
re.search():从字符串开头,在整个字符串中进行匹配,有符合正则规则则子串
,返回结果match对象,没有匹配到结果,返回None,单次匹配
re.findall():在整个字符串中匹配所有符合正则规则的结果,返回一个list
re.finditer():在整个字符串中匹配所有符合正则规则的结果,返回一个可叠代对象
re.sub():在整个字符串中,替换所有符合正则表达式的子串
re.split() :根据正则表达式,分割字符串,返回一个list
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

崔子末

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值