爬虫解析利器 PyQuery 的使用

@Author: Runsen

每个网页,都有一定的特殊结构和层级关系,而且很多节点都有 id 或 class 作为区分,我们可以借助它们的结构和属性来提取信息。

如果你用惯了xpath和bs4,学习Pyquery是一个不错的选择。

pyquery 是 Python 的第三方库,我们可以借助于 pip3 来安装,安装命令如下:

<code>pip install pyquery
/<code>

下面,我以CSDN首页为例。

<code>import requests
from pyquery import PyQuery as pq
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"
}
res = requests.get("https://www.csdn.net/",headers = headers)
res.encoding = 'utf-8'
doc = pq(res.text)
print(doc("title"))
print(doc("title").text())
/<code>

输出如下

<code>
CSDN-专业IT技术社区
    
CSDN-专业IT技术社区
/<code>

下面,我需要拿到文章分类的标签。

爬虫解析利器 PyQuery 的使用

<code>print(doc(".nav_com ul li").text())
/<code>

输出如下

<code>推荐 动态 程序人生 Python Java 百万人学AI 前端 架构 区块链 数据库 5G 游戏开发 移动开发 运维 安全 云计算/大数据 研发管理 物联网 计算机基础 音视频开发 其他
/<code>

在上面的例子中,我们初始化 pyquery 对象之后,传入 CSS 选择器 .nav_com ul li,它的意思是先选取 class 为 nav_com 的节点,然后再选取其内部 ul ,在选择内部节点的li 节点,最后打印输出。

下面,我们拿文章。查找子节点需要用到 find 方法,传入的参数是 CSS 选择器

爬虫解析利器 PyQuery 的使用

<code>
for item in doc("#feedlist_id li").items():
    print(item.find(".title h2 a").text())
/<code>

输出如下

<code>应聘3万的职位,有必要这么刁难我么。。。沙雕。。。
荐 阿里面试,问了B+树,这个回答让我通过了
14个提高代码质量的好问题
你好,我们可以认识一下吗?
荐 面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?
/<code>

因为每次访问都是不一样的推荐内容,所有输出的文章标题不相同。

提取到节点之后,我们的最终目的当然是提取节点所包含的信息了。比较重要的信息有两类,一是获取属性,二是获取文本。

获取文本就是text()方法,获取属性是attr方法,比如attr('href')

<code>for item in doc("#feedlist_id li").items():
    print(item.find(".list_con .title h2 a").attr('href'))
/<code>

输出如下

<code>
https://blog.csdn.net/likun557/article/details/105608851
/<code>

下面,我用自己的博客来使用pyquery

爬虫解析利器 PyQuery 的使用

代码如下

<code>import requests
from pyquery import PyQuery as pq
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"
}
res = requests.get("https://blog.csdn.net/weixin_44510615",headers = headers)
res.encoding = 'utf-8'
doc = pq(res.text)
print(doc("title"))
print(doc("title").text())
for item in doc(".article-list div").items():
    print(item.find("h4 a").text(),item.find("h4 a").attr('href'))
/<code>

输出如下

<code>记录润森奋斗的点点滴滴_润森_CSDN博客-从零学Python数据分析,零基础学习Python的机器学习,零基础学Python爬虫领域博主
    
记录润森奋斗的点点滴滴_润森_CSDN博客-从零学Python数据分析,零基础学习Python的机器学习,零基础学Python爬虫领域博主
原创 我的回忆录 https://blog.csdn.net/weixin_44510615/article/details/103949794
原创 我 https://blog.csdn.net/weixin_44510615/article/details/90384881
原创 自我感触 https://blog.csdn.net/weixin_44510615/article/details/90302069
原创 什么是人工智能,还有如何学习人工智能,看我这篇的吹水文 https://blog.csdn.net/weixin_44510615/article/details/105620125
/<code>

对于PyQuery可以参考官方文档:https://pyquery.readthedocs.io/en/latest/


分享到:


相關文章: