网络爬虫第1天之数据解析库的使用

一、正则表达式

正则表达式(Regular Expression 简称regex或regexp)是一种强大的文本处理工具,它可以帮助实现快速的检索、替换或验证字符串中的特定模式。

1、match

  match()方法会尝试从字符串开始的位置到字符结束的位置匹配正则表达式,如果匹配,返回匹配的结果,不匹配返回None。

import re
content = 'Hello 123456 welcome to tuling'
print(len(content))
result = re.match('Hello\s\d\d\d\s\d{3}\w{9}',content)
print(result)
print(result.group())
pritn(result.span())# group()返回本正则匹配的字符串
# start()返回匹配开始的位置
# span()返回一个元组包含匹配(开始,结束)的位置
(1)匹配数字
import re
content = 'Hello 123456 welcome to tuling'
print(len(content))
result = re.match('Hello\s\d\d\d\s\d{3}\w{9}',content)
print(result)
print(result.group())
pritn(result.span())# group()返回本正则匹配的字符串
# start()返回匹配开始的位置
# span()返回一个元组包含匹配(开始,结束)的位置
(2)通用匹配
import recontent = 'Hello 123 456 welcome to tuling'
result = re.match('^Hello\s(\d+)\swelcome',content)
print(result)
print(result.span())
(3)贪婪和非贪婪

python默认贪婪模式(匹配的更多)

在“*”,“?”,“+”,“{m,n}”后面加上?,使贪婪变成非贪婪

import re
concent = 'https://feier.com/yyds'
result1 = re.match('http.*?com/(.*?)',content)
result2 = re.match('http.*?com/(.*)',content)
print('result1:',result1.group()) #输出:result1: https://feier.com/
print('result2:',result2.group()) #输出:result2: https://feier.com/yyds
(4)修饰符

2、search

匹配时会扫描整个字符串,然后返回第一个匹配成功的结果,如果搜索完还没有找到,就返回None。

二、PyQuery

  PyQuery 是一个用于解析HTML和XML文档的Python库,它提供了与jQuery类似的语法,使得从文档中提取信息变得简单快捷。PyQuery 是基于lxmletree 库构建的,因此它速度很快,并且可以处理复杂的XML/HTML文档。

使用PyQuery具体步骤如下:

安装PyQuery

首先,你需要安装 PyQuery。通常可以通过pip来安装(使用国内阿里镜像源):

如果以后安装不想输入  -i Simple Index

可以配置pip.ini文件,具体步骤如下:https://mp.csdn.net/mp_blog/creation/editor/135030143

pip install pyquery -i http://mirrors.aliyun.com/pypi/simple/
使用PyQuery解析HTML

一旦安装了 PyQuery,你就可以开始使用它来解析HTML或XML了。下面是一个简单的例子:

在这个例子中,pq(html) 创建了一个 PyQuery 对象,然后我们使用CSS选择器 'p' 来查找所有的<p>标签。

from pyquery import PyQuery as pq# 定义一个HTML字符串
html = """
<div><p class="hello">Hello</p><p class="world">World</p>
</div>
"""# 创建PyQuery对象
d = pq(html)# 查找所有的<p>标签
paragraphs = d('p')
for p in paragraphs.items():print(p.text())print(p)#输出
'''
Hello
<p class="hello">Hello</p>World
<p class="world">World</p>
'''
使用PyQuery从网络获取内容

PyQuery 也可以直接从网址或者文件加载内容,例如:

from pyquery import PyQuery as pq# 从网址获取内容
d = pq(url='http://example.com/')# 从文件获取内容
# d = pq(filename='path/to/your/file.html')# 使用CSS选择器
h1 = d('h1').text()
print(h1)
# 输出 Example Domain
使用PyQuery进行更高级的选择和操作

PyQuery 支持多种CSS选择器和各种操作,例如:

from pyquery import PyQuery as pqhtml = """
<ul><li class="item-0">item 1</li><li class="item-1 active"><a href="link2.html">item 2</a></li><li class="item-0" id="unique-item"><a href="link3.html">item 3</a></li><li class="item-1 active"><a href="link4.html">item 4</a></li><li class="item-0">item 5</li>
</ul>
"""d = pq(html)# 查找第一个li元素
first_li = d('li:first')
print(first_li.text())# 查找ID为"unique-item"的元素
unique_item = d('#unique-item')
print(unique_item.text())# 找到所有 class 包含 active 的 li 元素
active_items = d('li.active')
for item in active_items.items():print(item.text())# 查找 href 为 "link3.html" 的 a 元素的父元素
parent_li = d('a[href="link3.html"]').parent()
print(parent_li.attr('class'))'''
输出:
item 1
item 3
item 2
item 4
item-0
'''

PyQuery 的强大功能使其成为处理复杂HTML/XML文档时的一个良好选择,尤其对于那些已经熟悉jQuery语法的开发者。

三、Xpath

XPath(XML Path Language)是一种在XML和HTML文档中查找信息的语言。它使用路径表达式来选取文档中的节点或节点集。XPath 由 W3C 作为一个标准发布,被广泛应用于各种XML解析和处理技术中,比如在XSLT(Extensible Stylesheet Language Transformations)中选取数据,或者在Python的lxml库中解析HTML文档。

插件下载:https://chorme.zzzmh.cn/index

XPath 语法允许你指定文档的结构,以便精确选取出你想要的节点,比如元素、属性、文本等。一些基本的XPath选择器包括:

  • nodename: 选取此节点的所有子节点。
  • /: 从根节点选取。
  • //: 从匹配选择的当前节点选择文档中的节点,不考虑它们的位置。
  • .: 选取当前节点。
  • ..: 选取当前节点的父节点。
  • @: 选取属性。

例子

下面是一些XPath表达式的例子及其描述:

  • /bookstore: 选取根元素bookstore。只有bookstore元素才能被选取。
  • bookstore/book: 选取属于bookstore子元素的所有book元素。
  • //book: 选取所有book子元素,而不管它们在文档中的位置。
  • bookstore//book: 选取属于bookstore元素的后代的所有book元素,而不管它们位于bookstore下的什么位置。
  • //@lang: 选取名为lang的所有属性。

在Python中,可以使用lxml库来执行XPath查询。下面是如何使用lxml和XPath来解析HTML文档的一个例子:

from lxml import etree# 假设我们有以下HTML文档
html_content = """
<html><body><div id="content"><ul id="list"><li>Item 1</li><li>Item 2</li><li>Item 3</li></ul><div class="footer">Footer information</div></div></body>
</html>
"""# 解析HTML内容
tree = etree.HTML(html_content)# 使用XPath选取所有的<li>元素
items = tree.xpath('//li')
for item in items:print(item.text)  # 输出: Item 1, Item 2, Item 3# 使用XPath选取id为"list"的<ul>元素下的所有子节点
list_items = tree.xpath('//ul[@id="list"]/li')
for item in list_items:print(item.text)  # 输出: Item 1, Item 2, Item 3# 使用XPath获取class为"footer"的div的文本
footer = tree.xpath('//div[@class="footer"]/text()')[0]
print(footer)  # 输出: Footer information

在上述例子中,我们使用lxml.etree.HTML函数将HTML字符串解析为一个元素树,然后利用xpath方法来执行XPath查询。这是在Python中进行XML和HTML文档处理时的一种常见做法。

四、Beautiful Soup

Beautiful Soup是一个用于从HTML和XML文件中提取数据的Python库。它创建了一个解析树,这便于开发者能够轻松地搜索和修改解析树。Beautiful Soup自动将输入文档转换为Unicode编码,并输出有效的HTML/XML。它适用于多种解析器,如Python标准库中的html.parserlxmlhtml5lib

安装 Beautiful Soup

首先,你需要安装Beautiful Soup库,通常可以通过pip来安装:

pip install beautifulsoup4

使用 Beautiful Soup 解析HTML

安装完成后,你就可以开始使用Beautiful Soup来解析HTML了。下面是一些基本用法的例子:

from bs4 import BeautifulSoup# 定义一个HTML字符串
html_doc = """
<html>
<head><title>The Dormouse's story</title>
</head>
<body><p class="title"><b>The Dormouse's story</b></p><p class="story">Once upon a time there were three little sisters; and their names were<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;and they lived at the bottom of a well.</p><p class="story">...</p>
</body>
</html>
"""# 创建一个Beautiful Soup对象
soup = BeautifulSoup(html_doc, 'html.parser')# 获取<title>标签的内容
title_tag = soup.title
print(title_tag)  # 输出: <title>The Dormouse's story</title>
print(title_tag.string)  # 输出: The Dormouse's story# 查找文档中所有的<a>标签
a_tags = soup.find_all('a')
for tag in a_tags:# 输出每个<a>标签的href属性print(tag.get('href'))# 查找文档中所有类属性为"sister"的<a>标签
sisters = soup.find_all('a', class_='sister')
for sister in sisters:# 输出sister的文本内容print(sister.string)

在这个例子中,我们使用了BeautifulSoup(html_doc, 'html.parser')来创建一个Beautiful Soup对象。然后我们使用了.title来获取标题标签和.find_all()方法来获取所有的<a>标签。

使用不同的解析器

Beautiful Soup支持不同的解析器,这里是如何选择解析器的例子:

  • html.parser: 使用Python内置的HTML解析器。
  • lxml: 使用lxml的HTML解析器。
  • lxml-xml: 使用lxml的XML解析器。
  • html5lib: 使用html5lib解析器,它会像浏览器一样解析HTML。
# 使用lxml解析器来创建Beautiful Soup对象
soup = BeautifulSoup(html_doc, 'lxml')# 其他用法与html.parser相同

请注意,使用lxmlhtml5lib可能需要你先安装这些库(可以使用pip安装)。

pip install lxml
pip install html5lib

Beautiful Soup库在爬虫和数据挖掘中非常有用,因为它可以轻松处理网页中的复杂元素和嵌套。

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

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

相关文章

gitee gihub上传步骤

上传 1. 到具体要上传的文件目录 2. 右击git Bash Here 初始化仓库&#xff1a;git init 3. 添加文件 添加所有文件 : git add . &#xff08;注意这里有个点&#xff09;添加具体文件&#xff1a; git add test.md 4. 添加到暂存区 git commit -m 暂存区 5. 将本地代…

如何将数据库导入MySQL的办法

在电脑cmd终端进行导入 首先找到MySQL中bin的位置 第一步&#xff1a;找到MySQL 第二步&#xff1a;进入MySQL 第三步&#xff1a;打开bin 第四步&#xff1a;输入cmd进入终端 第五步&#xff1a; 输入mysql -uroot -p 然后会弹出enter password&#xff1a; 输入你的密码…

Day10 Liunx高级系统设计11-数据库2

DQL:数据查询语言 查询全表 select * from 表名; 查询指定列 select 列名 1, 列名 2,… from 表名 ; 条件查询 select * from 表名 where 条件 ; 注意&#xff1a; 条件查询就是在查询时给出 WHERE 子句&#xff0c;在 WHERE 子句中可以使用如下运算符及关键 字&#…

linux笔记--VSCode利用交换机跳转服务器

目录 1--前言 2--VSCode设置 3--ssh连接 1--前言 博主学校的服务器有两个&#xff0c;其中一个服务器&#xff08;14&#xff09;可以通过挂内网VPN来进行连接&#xff0c;但另一个服务器&#xff08;15&#xff09;即使挂了VPN也不能连接&#xff0c;只能通过内网进行连接。…

ripro后台登录后转圈和图标不显示的原因及解决方法

最近&#xff0c;好多小伙伴使用ripro主题的小伙伴们都发现&#xff0c;登录后台后&#xff0c;进入主题设置就转圈&#xff0c;等待老半天后好不容易显示页面了&#xff0c;却发现图标不显示了&#xff0c;都统一显示为方框。 这是因为后台的js、css这类静态资源托管用的是js…

力扣刷题-二叉树-找树左下角的值

513 找树左下角的值 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1&#xff1a; 示例 2&#xff1a; 思路 层序遍历 直接层序遍历&#xff0c;因为题目说了是最底层&#xff0c;最左边的值&a…

紫光FPGA DDR3 IP使用和注意事项(axi4协议)

紫光DDR3 IP使用 对于紫光ddr3 IP核的使用需要注意事情。 阅读ddr ip手册&#xff1a; 1、注意&#xff1a;对于写地址通道&#xff0c;axi_awvalid要一直拉高&#xff0c;axi_awready才会拉高。使用的芯片型号时PG2L100H-6FBG676&#xff0c;不同的型号IP核接口和axi的握手协…

IDEA2020关于Cannot resolve symbol ‘servlet‘报错

刚开始也配置了tomcat&#xff0c;但是依然报错&#xff0c;后来查找资料解决了 在项目下面创建一个libs文件夹&#xff0c;然后将tomcat / lib文件夹中的servlet-api.jar复制了过来&#xff0c;然后再添加到library。 具体操作步骤&#xff1a;

Code automatic processing

自动化处理没啥用的代码&#xff0c;测试下&#xff0c;还不错的感觉

Elasticsearch的使用总结

Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。 put/post请求&#xff1a;http://localhost:9200/索引库名称 {"settings":{"index":{"number_of_shards":1, # 分片数量…

风速预测(三)EMD-LSTM-Attention模型

目录 1 风速数据EMD分解与可视化 1.1 导入数据 1.2 EMD分解 2 数据集制作与预处理 2.1 先划分数据集&#xff0c;按照8&#xff1a;2划分训练集和测试集 2.2 设置滑动窗口大小为7&#xff0c;制作数据集 3 基于Pytorch的EMD-LSTM-Attention模型预测 3.1 数据加载&#…

uniapp怎么获取微信步数

微信步数获取的背景 微信步数是指用户在微信运动中记录的步数数据。微信提供了开放能力&#xff0c;允许第三方应用获取用户授权后的微信步数数据&#xff0c;以便进行进一步的数据分析和展示。使用时报错&#xff1a;fail api scope is not declared in the privacy agreemen…

libevent服务GET/POST的简单使用

目录 1、前言2、测试demo2.1、目录结构2.2、 测试源码2.2.1、http_server.cpp2.2.2、 http_server.h 2.3、 编译2.4、 运行结果2.4.1、测试POST2.4.2 、测试GET请求 1、前言 项目开发中经常需要使用到私有协议和Qt,Android等GUI前端通信&#xff0c;比较常用的使用POST和GET方式…

计算机操作系统-第十八天

目录 进程调度时机 补充知识 进程调度的方式 非剥夺调度方式 剥夺调度方式 进程的切换与过程 本节思维导图 进程调度时机 进程调度&#xff08;低级调度&#xff09;&#xff0c;即按照某种算法从就绪队列中选择一个进程为其分配处理机。 共有两种需要进行进程调度与…

基于junit4搭建自定义的接口自动化测试框架

随着业务的逐步稳定&#xff0c;对于接口的改动也会逐渐变少。更多的是对业务逻辑的优化&#xff0c;功能实现的完善。对于测试来说&#xff0c;重复繁琐的功能测试不仅效率低下&#xff0c;而且耗费一定的人力资源。笔者支持的信息流业务下的一个图文管理平台就是一个功能较为…

Lambda表达式的简单理解

1. 初识lambda表达式 Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。 Lambda 表达式&#xff08;Lambda exp…

广州华锐互动:VR煤矿特殊工种作业实训帮助提高矿工的操作技能和安全意识

VR煤矿特殊工种作业实训系统为煤矿企业培训提供了全方位的支持&#xff0c;帮助提高矿工的操作技能和安全意识&#xff0c;促进煤矿企业的安全生产。 首先&#xff0c;VR煤矿特殊工种作业实训系统可以提供逼真的虚拟操作环境&#xff0c;使矿工能够身临其境地感受各种工种的作业…

计算机网络 网络层上 | IP数据报,IP地址,ICMP,ARP等

文章目录 1 网络层的两个层面2 网络协议IP2.1 虚拟互联网络2.2 IP地址2.2.1 固定分类编址方式2.2.2 无分类编制CIDR2.2.3 MAC地址和IP地址区别 2.3 地址解析协议ARP2.3.1 解析过程 2.4 IP数据报格式 3 IP层转发分组流程4 国际控制报文协议ICMP4.1 ICMP格式结构4.2 分类4.2.1 差…

学习MS Dynamics AX 2012编程开发 2. X++语言

X是用于构建Dynamics AX功能的编程语言。X是一种与C类似的面向对象编程语言。 完成本章后&#xff0c;您将能够理解X语言&#xff1b;您将知道可用的数据类型是什么&#xff0c;如何创建各种循环&#xff0c;如何比较和操作变量&#xff0c;在哪里可以找到预定义的函数&#x…

【Android逆向】记录一次某某虚拟机的逆向

导语 学了一段时间的XPosed&#xff0c;发现XPosed真的好强&#xff0c;只要技术强&#xff0c;什么操作都能实现... 这次主要记录一下我对这款应用的逆向思路 apk检查 使用MT管理器检查apk的加壳情况 发现是某数字的免费版本 直接使用frida-dexdump 脱下来后备用 应用分…