人见人爱的最新 Python 爬虫利器

Python上有一个非常著名的HTTP库——requests,相比大家都听说过,用过的人都说好!现在requests库的作者又发布了一个新库,叫做requests-html,看名字也能猜出来,这是一个解析HTML的库,而且用起来和requests一样爽,下面就来介绍一下它。

安装

安装requests-html非常简单,一行命令即可做到。需要注意一点就是,requests-html只支持Python 3.6及更新的版本,所以使用老版本的Python的同学需要更新一下Python版本了。看了下源代码,因为requests-html广泛使用了一个Python 3.6中的新特性——类型注解。

pip install requests-html

基本使用

获取网页

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类的使用方法。

from
 requests_html 
import
 
HTMLSession



session = 
HTMLSession
()

r = session.
get
(
'https://www.qiushibaike.com/text/'
)

// 查看页面内容

print
(r.html.html)

获取链接

linksabsolute_links两个属性分别返回HTML对象所包含的所有链接和绝对链接(均不包含锚点)。

# 获取链接

print
(r.html.links)

print
(r.html.absolute_links)

结果为下(因为结果太长,所以我随便取了一点,看个意思就行):

{
'/article/104353012'
, 
'/article/120616112'
, 
'/users/32331196/'
}

{
'https://www.qiushibaike.com/imgrank/'
, 
'https://www.qiushibaike.com/article/120669516'
, 
'https://www.qiushibaike.com/article/120682041'
}

获取元素

request-html支持CSS选择器和XPATH两种语法来选取HTML元素。首先先来看看CSS选择器语法,它需要使用HTML的find函数,该函数有5个参数,作用如下:

  • selector,要用的CSS选择器;

  • clean,布尔值,如果为真会忽略HTML中style和script标签造成的影响(原文是sanitize,大概这么理解);

  • containing,如果设置该属性,会返回包含该属性文本的标签;

  • first,布尔值,如果为真会返回第一个元素,否则会返回满足条件的元素列表;

  • _encoding,编码格式。

下面是几个简单例子:

# 首页菜单文本

print
(r.html.find(
'div#menu'
, first=
True
).text)

# 首页菜单元素

print
(r.html.find(
'div#menu a'
))

# 段子内容

print
(list(map(
lambda
 x: x.text, r.html.find(
'div.content span'
))))

结果如下,因为段子太多,所以随便选了两个:

热门 
24
小时 热图 文字 穿越 糗图 新鲜

[<
Element
 
'a'
 href=
'/'
 rel=(
'nofollow'
,)>, <
Element
 
'a'
 href=
'/hot/'
>, <
Element
 
'a'
 href=
'/imgrank/'
>, <
Element
 
'a'
 id=
'highlight'
 href=
'/text/'
>, <
Element
 
'a'
 href=
'/history/'
>, <
Element
 
'a'
 href=
'/pic/'
>, <
Element
 
'a'
 href=
'/textnew/'
>]

[
'有一次

你可能感兴趣的:(后端,前端,python,爬虫,开发语言,javascript,设计模式)