python爬虫--pyquery解析库整理

前言

欢迎来到我的博客

个人主页:北岭敲键盘的荒漠猫-CSDN博客

本文整理python的爬虫解析库pyquery的语法

简洁快速的整理,建议有前端基础的人看

pyquery解析原理

pyquery的原理就是拿到网站的前端源码后,我们根据我们需求信息所在的标签进行筛选。

选出指定类的标签,或者指定id,指定标签内部的标签。

然后再从这些标签中进行提取我们的信息。

pyquery安装

输入命令

pip install pyquery

初始化

1.内置请求,现请求现处理

from pyquery import PyQuery as pq
doc=pq(url="http://xiaodi8.com/",encoding="utf-8")
print(doc("a"))

这里直接用内置的请求方式请求了网站,然后从中挑选出了a标签。

2.从文本中解析源代码

from pyquery import PyQuery as pq
doc=pq(filename="111.txt", encoding="utf-8")
print(doc("a"))

3.利用requests定制请求,再进行解析

from pyquery import PyQuery as pq
import requests
res=requests.get("http://xiaodi8.com/")
res.encoding="utf-8"
doc=pq(res.text)
print(doc("a"))

 

内容解析

之前说过,这个库的原理就是筛选相应内容所在的标签。

那么我们会对筛选标签的准确程度有很高的要求。

所以pyquery直接上了前端jquery的选择器相应的形式。

如果你有前端开发的经验,可以直接上手。

查阅文档:

jQuery 选择器_w3cschool

jquery在线手册|jQuery API中文手册|jQuery速查表|jQuery参考手册|jQuery API|jQuery在线文档|jQuery最新手册

基础用法跟css选择器几乎相同。

.aaa代表选择属于me类的标签

#bbb代表id为bbb的标签

*代表所有标签

from pyquery import PyQuery as pq
import requests
res=requests.get("http://xiaodi8.com/")
res.encoding="utf-8"
doc=pq(res.text)
print(doc("a"))

这串代码中的

doc=pq(res.text)
print(doc("a"))

实例化对象后,直接传入相关的选择规则即可。这里案例是选择出a标签

这里简单一提:具体详细的选择器可以查看文档或者看看我之前整理的css的基础选择器大体了解一下。

css选择器整理-CSDN博客

css复合选择器-CSDN博客 

模糊匹配

有时候可能我们会遇到特别的情况,比如某些标签都有一个id属性。

这些id属性都有某个单词混在里面。

我们需要模糊匹配,就可以用下面模版。

doc('li[id*="hello"]')  #id中含有hello的li标签
doc('li[id^="hello"]')  #id中以hello开头的li标签
doc('li[id$="hello"]')  #id中以hello结尾的li标签

取得数据内容

我们经过上一步内容的解析之后,我们可以看到我们得到的是相关的标签,而不是我们要的内容。

我们要的内容有两种情况,有时我们要的是这个标签中的某个属性,或者有时我们要的实际上就是标签中间的字。这时候就需要我们根据不同的需求来改编代码。

获取目标标签的属性

a标签是超链接,那么超链接通常是带有href指向指定网址的属性。我们尝试获取这些属性。

使用下面代码样式。

#导入库
from pyquery import PyQuery as pq
import requests
#请求网址
res=requests.get("http://xiaodi8.com/")
res.encoding="utf-8"
#实例化对象
doc=pq(res.text)
#筛选出a标签
lista=doc("a")
#把a标签的href属性一次迭代给a并输出
for a in lista.items():print(a.attr("href"))#最后这个代码也可以用这个形式#print(a.attr.href)

获取目标内容

一个标签中间有时是写在里面一些文字内容的。

我们想要提取出来可以用下面模板。

#导入库
from pyquery import PyQuery as pq
import requests
#请求网址
res=requests.get("http://xiaodi8.com/")
res.encoding="utf-8"
#实例化对象
doc=pq(res.text)
#筛选出a标签
lista=doc("a")
#把a标签的href属性一次迭代给a并输出
for a in lista.items():print(a.text())#最后这个代码也可以用这个形式#print(a.html())

案例演示

这里爬取萧瑟迪博客左侧网站导航栏的各个名称案例演示

观察网站样式

本次目标是获取这些导航栏的内容还有对应的网址。

我们观察代码结构

发现这些代码都是在ul标签中的li标签中的a标签。

而在li标签中,都有navbar。

那么思路就是抓取源码,之后筛选id属性有navbar的标签,打印出他指向的网址和标签的内容即可

代码样式

#导入库
from pyquery import PyQuery as pq
import requests
#请求网址
res=requests.get("http://xiaodi8.com/")
res.encoding="utf-8"
#实例化对象
doc=pq(res.text)
#筛选出a标签
lista=doc("ul li[id*='navbar'] a")
#把a标签的href属性一次迭代给a并输出
for a in lista.items():print(a.text(),end="  ")print(a.attr("href"))

比较简单。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/405703.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

漏洞挖掘 | 记一次edusrc--轻松拿下中危信息泄露

1.前言 也是一次漏洞挖掘的思路分享 上次我们讲过了关于小程序方面的一些小思路,即关于抓包更改id号造成的一个信息泄露,但是在小程序上的信息泄露很难涉及到公民三要素这是一个痛点,今天就来分享一下一次edu挖掘时挖到的一个涉及公民三要素…

【云备份】项目总结

文章目录 项目总结项目总结项目扩展:常见问题: 项目总结 项目总结 搭建云备份服务器与客户端,客户端程序运行在客户机上自动将指定目录下的文件备份到服务器,并且能够支持浏览器查看与下载,其中下载支持断点续传功能,并且服务器端…

kubernetes的pod基础

kubernetes的pod基础 pod概念 pod(豆荚),是k8s的最小管理单元。是一个或多个容器的组合,这些容器共享存储,网络和命名空间,以及运行规范,pod内的容器统一的进行安排和调度。pod是一组具有共享命…

【TCP/IP】自定义应用层协议,常见端口号

互联网中,主流的是 TCP/IP 五层协议 5G/4G 上网,是有自己的协议栈,要比 TCP/IP 更复杂(能够把 TCP/IP 的一部分内容给包含进去了) 应用层 可以代表我们所编写的应用程序,只要应用程序里面用到了网络通信…

进程间的通信3——IPC对象通信->共享内存、网络通信

一、共享内存 1、原理 直接对实际物理内存进行操作,不用先拷贝到用户空间再到内核空间(物理内存)。 2、特点 (1)共享内存是一块内核预留的空间; (2)最高效的通信方式。 3、操作 产…

springboot+Quartz通过数据库控制定时任务执行与时间

前言 在我们的springboot项目中,有很多种实现定时任务的方式 有用最简单的 Scheduled 实现定时任务,即: import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component;Component EnableScheduling p…

【RTT-Studio】详细使用教程十三:UART的DMA 接收及轮询发送

文章目录 一、简介二、RTT配置三、使用信号量接收四、使用消息队列接收五、测试验证 一、简介 串口是指数据一位一位地顺序传送,其特点是通讯线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线)&#xff0…

我的创作纪念日【2048】

机缘 2048,是计算机二进制世界里很奇妙的数字,在CSDN上创作的第六年,记录从事本行业的知识学习与总结,好记性不如烂笔头,或许写的东西不如大佬的文章,那么有深度,但自己也是在坚持,…

自动微分autograd实践要点

目录 定义Value手动定义每个 operator 的 _backward() 函数构建反向传播计算链 本文主要参考 反向传播和神经网络训练 大神Andrej Karpathy 的“神经网络从Zero到Hero 系列”之一,提炼一些精要,将反向传播的细节和要点展现出来 定义Value 第一步首先要…

传知代码-自动化细胞核分割与特征分析(论文复现)

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 引言 细胞核分割和分类在医学研究和临床诊断中具有重要意义。精准的细胞核分割能够帮助医生更好地识别和分析细胞核的形态学特征,从而辅助疾病诊断、癌症检测以及药物研发。HoverNet是一种基于深度学…

【GitLab】使用 Docker engine安装 GitLab 2: gitlab-ce:17.3.0-ce.0 拉取

ce版本必须配置代理。 极狐版本可以直接pull 社区版GitLab不支持Alibaba Cloud Linux 3,本操作以Ubuntu/Debian系统为例进行说明,其他操作系统安装说明,请参见安装社区版GitLab。 docker 环境重启 sudo systemctl daemon-reload sudo systemctl restart docker脚本安装 安裝…

苹果手机微信聊天记录删除了怎么恢复?

在日常使用手机的过程中,我们经常会遇到误删微信聊天记录的情况,尤其是对于那些重要的对话记录,一旦丢失可能会带来不小的困扰。今天,我们就来探讨一下如何在苹果手机上恢复被删除的微信聊天记录。 一、利用第三方数据恢复工具 对…

拓客工具,助你多维度筛选客源!

随着大数据与人工智能技术的飞速发展,企业拓客的方式也迎来了前所未有的变革。在这里将分享如何利用拓客工具,在任意行业中精实现高效拓客。 一、高级搜索:最新企业! 传统的客户开发方式往往依赖于广撒网式的营销手段,…

Qt实现tcp协议

void Widget::readyRead_slot() {//读取服务器发来的数据QByteArray msg socket->readAll();QString str QString::fromLocal8Bit(msg);QStringList list str.split(:);if(list.at(0) userName){QString str2;for (int i 1; i < list.count(); i) {str2 list.at(i);…

作业8/21

client cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget), socket(new QTcpSocket(this)) {ui->setupUi(this); // 设置 UI 界面// 控件初始状态设置为禁用&#xff0c;防止未连接…

Linux timedatectl 命令

timedatectl 是 Linux 系统中用于查询和更改系统日期、时间和时区的工具&#xff0c;它特别适用于那些使用 systemd 作为系统和服务管理器的系统。语法格式为“timedatectl [参数]”。 发现电脑时间跟实际时间不符&#xff1f;如果只差几分钟的话&#xff0c;我们可以直接调整。…

tekton通过ceph挂载node_modules的时候报错failed to execute command: copying dir: symlink

分析&#xff1a; 如果ceph的mountPath和workingDir路径一致的话&#xff0c;就会报错。 解决&#xff1a;node_modules挂载到/workspace下&#xff0c;workingDir的代码mv到/workspace下进行构建。

MyBatis-Plus与PageHelper依赖的jsqlparser库冲突

问题 最近遇到的一个项目升级了SpringBoot到3.x版本了&#xff0c;同时也准备升级MyBatis-Plus&#xff0c;即使用如下依赖&#xff1a; <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><…

初级python代码编程学习----简单的图形化闹钟小程序

我们来创建一个简单的图形化闹钟程序通常需要使用图形用户界面&#xff08;GUI&#xff09;库。以下是使用Python的Tkinter库创建一个基本闹钟程序的步骤&#xff1a; 环境准备 确保已安装Python。安装Tkinter库&#xff08;Python 3.8及以上版本自带Tkinter&#xff0c;无需…

【代码】Swan-Transformer 代码详解(待完成)

1. 局部注意力 Window Attention (W-MSA Module) class WindowAttention(nn.Module):r""" Window based multi-head self attention (W-MSA) module with relative position bias.It supports both of shifted and non-shifted window.Args:dim (int): Number…