【小白学爬虫连载(11)】--pyquery库详解

欢迎关注哈希大数据公众号【哈希大数据】

前面的分享如何获取免费高匿代理IP代码中我们用到了pyquery这个解析库,这个库在之前的分享中还不曾讲到,前面我们主要用的是beautiful soup解析库,如果你比较喜欢用CSS选择器,如果你对jQuery有所了解,可以选择使用pyquery,它的语法相对更为简单。下面我们看看该如何使用它吧!

本次分享将从以下四个方面介绍pyquery库:

  1. 如何安装pyquery

  2. 如何初始化

  3. 如何查找节点、获取信息

如何安装pyquery

Windows系统 利用win + R快捷键打开运行窗口,输入cmd点击确定,打开命令行,然后直接输入:pip install pyquery,等待完成安装后在命令行中输入python,然后输入import pyquery检查是否安装成功,如下图输入import pyquery后没有出现问题就说明安装成功。

【小白学爬虫连载(11)】--pyquery库详解_第1张图片
image
【小白学爬虫连载(11)】--pyquery库详解_第2张图片
image
【小白学爬虫连载(11)】--pyquery库详解_第3张图片
image

如何初始化

pyquery提供了多种初始化方法例如:直接传入字符串,传入URL,传入文件名,传入lxml等。对于爬虫来说我们很少的时候使用传入URL的方式,更多的是使用传入由requests或其他HTTP库请求URL得到的response。例如:

from pyquery import PyQuery as pq# 出入URLdoc = pq(url='https://www.baidu.com/')# 传入字符串的形式import requestsr = requests.get('https://www.baidu.com/')html = r.textdoc = pq(html)

因为请求url涉及到user-agent,cookies,检查是否成功返回等各种问题,所以还是交给专业的HTTP库去做比较好。

如何查找节点、获取信息

1.基本CSS选择器

我们可以利用class、id、标签名称或者是一个序列的方式定位到某个标签。

例如:

from pyquery import PyQuery as pq# 传入字符串的形式html_doc = """The Dormouse's story

The Dormouse's story

Once upon a time there were three little sisters; and their names wereElsie,Lacie andTillie;and they lived at the bottom of a well.

...

"""doc = pq(html_doc)title = doc('.title')#选择class为title的所有标签,及其子孙标签print(title)link1 = doc('html .story #link1')#选择所有html标签下的所有class为story的标签下的所有id为link1的标签。print(link1)

查找子节点

查找子节点需要用到find()方法,传入的参数是CSS选择器,我们还是以上面的HTML为例。

doc = pq(html_doc)title = doc('.title')#选择class为title的所有标签,及其子孙标签print(title)title_b = title.find('b')#找到b子标签

遍历

PyQuery的选择结果可能是多个节点,可能是单个节点,类型都是PyQuery类型,并没有返回像BeautifulSoup一样的列表。对于多个节点的结果,我们需要调用items()方法获取一个列表。

doc = pq(html_doc)names = doc('.story a').items()for name in names:    print(name)

获取属性、文本、HTML等信息

提取到某个PyQuery类型的节点之后,我们可以调用attr()方法来获取属性。

doc = pq(html_doc)name = doc('.story #link1')print(name.attr('href'))

我们可以调用text()方法来获取标签内的所有文本,例如:

doc = pq(html_doc)text = doc('.story')print(text.text())

这里我们将p标签的子标签a中的文本也获取出来了,有时候需要这样,但有时候我们只想获取其自身的text,不想得到其子标签的text这时候我们需要remove函数的帮助。

doc = pq(html_doc)text = doc('.story')text.find('a').remove()print(text.text())

这时候就将a标签剔除掉了,只留下p标签的内容。

pyquery利用class、id、标签名称返回符合条件的所有元素,但有时候我们只需要第一个或最后一个或其中几个。这时候我们利用伪类选择器就十分方便了。

2.伪类选择器

| p:first-child | 选择属于父元素的第一个子元素的每个

元素。 |
| p:last-child | 选择属于其父元素最后一个子元素每个

元素。 |
| a[src^="htpps"] | 选择其 src 属性值以 "https" 开头的每个 元素。 |
| a[src*="htpps"] | 选择其 src 属性中包含 "abc" 子串的每个
元素。 |

更多伪选择器的用法可以参考:http://www.w3school.com.cn/cssref/css_selectors.asp小结

本次分享主要介绍了pyquery的安装、初始化以及查找节点获取信息的方法,pyquery相对于beautiful soup库语法更为简单,而且对于熟悉jQuery的朋友来说是零门槛。但pyquery有时候会出现解析不出内容的情况,这也是之前没给大家介绍的原因,不过这种情况毕竟很少,为了快速搞定爬取任务,很多时候pyquery是不错的选择。

你可能感兴趣的:(【小白学爬虫连载(11)】--pyquery库详解)