爬虫基础(8)网页解析之pyquery库

一. pyquery库简介

PyQuery库也是一个非常强大又灵活的网页解析库,前端基础较好的人,使用更加方便,上手快,且功能更强大。

二. 安装pyquery库

在 Ubuntu 虚拟机中,pyquery 能通过 pip 来安装:

$ python -m pip install pyquery
或者
$ pip install pyquery

其他平台下的安装可参考其他相应的安装方式,此处不做概述。

三. pyquery库详析

1. 初始化

Beautiful Soup 一样,初始化 pyquery 的时候,也需要传入 HTML 文本来初始化一个 PyQuery 对象。它的初始化方式有多种,比如直接传入字符串、传入 URL、传人文件名等。下面我们来详细介绍一下。

(1)字符串初始化

首先,我们来看一个实例:

from pyquery import PyQuery as pq

html = """
<div class="header">
<div class="header_contain">
<div class="logo"></div>
<ul class="menu">
<li><a href="../news/index.html">Home Page</a></li>
<li><a href="../course/course.html">Online Class</a></li>
<li><a href="../doc/docDownload.html">Download Document</a></li>
<li><a href="../news/search.html">Search</a></li>
</ul>
<div class="login">
<span class="span Admin"><a href="../user/admin.html"><strong>USER ADMIN:</strong></a></span>
<span class="item"><a href="../user/login.html">SIGN IN | </a></span>
<span class="item"><a href="../user/register.html">SIGN UP | </a></span>
<span class="item" id="logout" >SIGN OUT</span>
</div>
</div>
</div>
"""
doc = pq(html)
print(doc('li'))

代码运行结果如下:

<li><a href="../news/index.html">Home Page</a></li>
<li><a href="../course/course.html">Online Class</a></li>
<li><a href="../doc/docDownload.html">Download Document</a></li>
<li><a href="../news/search.html">Search</a></li>

这里我们首先引入 PyQuery 这个对象,命名为pq。然后声明了一个 HTML 字符串,并将其当作参数传递给 PyQuery 类,这样就成功完成了初始化。接下来,将初始化的对象传入 CSS 选择器。在这个实例中,我们传入li节点,这样就可以选择所有的li节点。

(2)URL初始化

初始化的参数不仅可以以字符串的形式传递,还可以传入网页的URL,此时只需要指定参数为url即可:

from pyquery import PyQuery as pq

doc = pq(url='https://cuiqingcai.com/')
print(doc('title'))

# 运行结果:
<title>静觅丨崔庆才的个人站点</title>

这样的话,PyQuery 对象会首先请求这个 URL,然后用得到的 HTML 内容完成初始化,这其实就相当于用网页的源代码以字符串的形式传递给PyQuery类来初始化。它与下面的功能是相同的:

from pyquery import PyQuery as pq
import requests

doc = pq(requests.get('https://cuiqingcai.com/').text)
print(doc('title'))

代码输出结果与前者相同。

(3)文件初始化

当然,除了传递URL,还可以传递本地的文件名,此时将参数指定为 filename 即可:

from pyquery import PyQuery as pq

doc = pq(filename='test.html')
print(doc ('li'))

当然,这里需要有一个本地 HTML 文件 test.html,其内容是待解析的HTML字符串。这样它会首先读取本地的文件内容,然后用文件内容以字符串的形式传递给PyQuery类来初始化。

以上3种初始化方式均可,当然最常用的初始化方式还是以字符串形式传递。

2. 基本CSS选择器

首先,我们用一个实例来感受 pyquery 的 CSS 选择器的用法:

html = """
<div class="header">
<div class="header_contain">
<div class="logo"></div>
<ul class="menu">
<li><a href="../news/index.html">Home Page</a></li>
<li><a href="../course/course.html">Online Class</a></li>
<li><a href="../doc/docDownload.html">Download Document</a></li>
<li><a href="../news/search.html">Search</a></li>
</ul>
<div class="login">
<span class="span Admin"><a href="../user/admin.html"><span>USER ADMIN:</span></a></span>
<span class="item"><a href="../user/login.html">SIGN IN | </a></span>
<span class="item"><a href="../user/register.html">SIGN UP | </a></span>
<span class="item" id="logout" >SIGN OUT</span>
</div>
</div>
</div>
"""
html_query = pq(html)
print(html_query('.header_contain .menu li'))
print(type(html_query('.header_contain .menu li')))

代码运行结果如下:

<li><a href="../news/index.html">Home Page</a></li>
<li><a href="../course/course.html">Online Class</a></li>
<li><a href="../doc/docDownload.html">Download Document</a></li>
<li><a href="../news/search.html">Search</a></li>

<class 'pyquery.pyquery.PyQuery'>

这里我们初始化 PyQuery 对象之后,传入了一个CSS选择器,该选择器选取了所有的目标节点。打印其输出结果的类型,可以发现依然是 PyQuery 类型。

3. 查找节点

下面我们介绍一些常用的查询函数,这些函数和jQuery中函数的用法完全相同。

(1)子节点

查找子节点的函数有 find()children() 。需要注意的是,find() 方法查找的节点包括该节点之后所有的子孙节点;而 children() 查找的是该节点的子节点,不包括孙节点。例如下面示例:

from pyquery import PyQuery as pq

html_query = pq(html)
items = html_query('.login')
print(type(items))
print(items)

spans = items.find('span')
print(type(spans))
print(spans)

spans = items.children()
print(type(spans))
print(spans)

上述代码运行结果如下:

<class 'pyquery.pyquery.PyQuery'>
<div class="login">
<span class="span Admin"><a href="../user/admin.html"><span>USER ADMIN:</span></a></span>
<span class="item"><a href="../user/login.html">SIGN IN | </a></span>
<span class="item"><a href="../user/register.html">SIGN UP | </a></span>
<span class="item" id="logout">SIGN OUT</span>
</div>

<class 'pyquery.pyquery.PyQuery'>
<span class="span Admin"><a href="../user/admin.html"><span>USER ADMIN:</span></a></span>
<span>USER ADMIN:</span><span class="item"><a href="../user/login.html">SIGN IN | </a><
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值