Python上有一个非常著名的HTTP库——requests,相比大家都听说过,用过的人都说好!现在requests库的作者又发布了一个新库,叫做requests-html,看名字也能猜出来,这是一个解析HTML的库,而且用起来和requests一样爽,下面就来介绍一下它。
安装
安装requests-html非常简单,一行命令即可做到。需要注意一点就是,requests-html只支持Python 3.6及更新的版本,所以使用老版本的Python的同学需要更新一下Python版本了。看了下源代码,因为requests-html广泛使用了一个Python 3.6中的新特性——类型注解。
基本使用
获取网页
requests-html和其他解析HTML库最大的不同点在于HTML解析库一般都是专用的,所以我们需要用另一个HTTP库先把网页下载下来,然后传给那些HTML解析库。而requests-html自带了这个功能,所以在爬取网页等方面非常方便。
下面的代码获取了糗事百科上面的文字段子页面,返回的对象r是requests.Reponse类型,更确切的说是继承自前者的requests_html.HTMLResponse类型。这里其实和requests库的使用方法差不多,获取到的响应对象其实其实也没啥用,这里的关键就在于r.html这个属性,它会返回requests_html.HTML这个类型,它是整个requests_html库中最核心的一个类,负责对HTML进行解析。我们学习requests_html这个库,其实也就是学习这个HTML类的使用方法。
获取链接
links和absolute_links两个属性分别返回HTML对象所包含的所有链接和绝对链接(均不包含锚点)。
结果为下(因为结果太长,所以我随便取了一点,看个意思就行):
获取元素
request-html支持CSS选择器和XPATH两种语法来选取HTML元素。首先先来看看CSS选择器语法,它需要使用HTML的find函数,该函数有5个参数,作用如下:?
- selector,要用的CSS选择器;?
- clean,布尔值,如果为真会忽略HTML中style和script标签造成的影响(原文是sanitize,大概这么理解);?
- containing,如果设置该属性,会返回包含该属性文本的标签;?
- first,布尔值,如果为真会返回第一个元素,否则会返回满足条件的元素列表;?
- _encoding,编码格式。
下面是几个简单例子:
结果如下,因为段子太多,所以随便选了两个:
然后是XPATH语法,这需要另一个函数xpath的支持,它有4个参数如下:?
- selector,要用的XPATH选择器;?
- clean,布尔值,如果为真会忽略HTML中style和script标签造成的影响(原文是sanitize,大概这么理解);?
- first,布尔值,如果为真会返回第一个元素,否则会返回满足条件的元素列表;?
- _encoding,编码格式。
还是上面的例子,不过这次使用XPATH语法:
输出和上面那个几乎一样,之所以说是“几乎”,因为第三个输出会多出几个换行符,不知道什么原因。需要注意的一点是如果XPATH中包含text()或@href这样的子属性,那么结果相应的会变成简单的字符串类型,而不是HTML元素。
元素内容
糗事百科首页LOGO的HTML代码如下所示:
我们来选取这个元素:
要获取元素的文本内容,用text属性:
要获取元素的attribute,用attr属性:
要获取元素的HTML代码,用html属性:
要搜索元素的文本内容,用search函数,比如说我们现在想知道是糗事什么科:
如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h60179.shtml