Python上有一个非常著名的HTTP库——requests,相比大家都听说过,用过的人都说好!现在requests库的作者又发布了一个新库,叫做requests-html,看名字也能猜出来,这是一个解析HTML的库,而且用起来和requests一样爽,下面就来介绍一下它。
@TOC
安装
1 | pip install requests_html |
如果还不会pip安装的请看我的这篇文章——>pip 安装,更新,卸载,查看模块方法
Note: requests-html只支持Python 3.6及更新的版本,所以使用老版本的Python的同学需要更新一下Python版本了。
基本用法
获取网页
1 | from requests_html import HTMLSession |
requests-html和其他解析HTML库最大的不同点在于HTML解析库一般都是专用的,所以我们需要用另一个HTTP库先把网页下载下来,然后传给那些HTML解析库。
而requests-html自带了这个功能,所以在爬取网页等方面非常方便
获取连接
1 | #相对路径 |
1 | #绝对路径 |
links和absolute_links两个属性分别返回HTML对象所包含的所有链接和绝对链接(均不包含锚点)。
获取元素
request-html支持CSS选择器和XPATH两种语法来选取HTML元素。
1、首先先来看看CSS选择器语法,它需要使用HTML的find函数,该函数有5个参数,作用如下:
- selector,要用的CSS选择器;
- clean,布尔值,如果为真会忽略HTML中style和script标签造成的影响(原文是-sanitize,大概这么理解);
- containing,如果设置该属性,会返回包含该属性文本的标签;
- first,布尔值,如果为真会返回第一个元素,否则会返回满足条件的元素列表;
- _encoding,编码格式。
示例:输出结果为:1
2
3#获取职业名称
position = h.html.find('#resultList > div:nth-child({num}) > p > span > a'.format(num=i), first=True).text
print(position)2、XPATH语法,这需要另一个函数xpath的支持,它有4个参数如下:1
Python开发工程师
- selector,要用的XPATH选择器;
- clean,布尔值,如果为真会忽略HTML中style和script标签造成的影响(原文是sanitize,大概这么理解);
- first,布尔值,如果为真会返回第一个元素,否则会返回满足条件的元素列表;
- _encoding,编码格式。
示例:
1 | #获取职业名称 |
输出结果:
1 | Python开发工程师 |
元素内容
要获取元素的attribute,用attr属性
1 | print(h.attrs) |
获取元素的html代码
1 | print(h.html) |
要搜索元素的文本内容,用search函数
1 | print(e.search('51j{}bs')[0]) |
两个链接属性
1 | print(e.links) # 相对路径 |
实例 爬取51jobs网站有关Python工作的信息
1 | from requests_html import HTMLSession |
输出结果(由于信息的太多只展示部分):
1 | 序号,职位名称,公司名,地点,薪资 |
Note: 如果频繁访问爬取的网页有可能会面临着ip被封,可以适当的使用代理ip来防止自己的ip被封,详细使用请参考我的这篇文章——> 都什么时代了还在裸爬吗,快用IP代理池吧!