首页 > 编程语言 >Python网页解析

Python网页解析

时间:2024-05-27 11:58:24浏览次数:12  
标签:网页 Python 标签 find soup print div 解析 节点

课前案例

如果不存在imgs目录,则需要手动创建它,或者通过代码创建。可以使用 Path.mkdir() 方法创建目录。例如:

imgs_dir = Path("imgs")
imgs_dir.mkdir(parents=True, exist_ok=True)

记得下载 lxml软件包,可以在终端用指令下载:

pip install -i https://mirrors.aliyun.com/pypi/simple/ lxml

Beautiful Soup

解析器

Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器:

解析器使用方法优势劣势
Python标准库BeautifulSoup(markup, "html.parser")Python的内置标准库执行速度适中文档容错能力强Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差
lxml HTML 解析器BeautifulSoup(markup, "lxml")速度快文档容错能力强需要安装C语言库
lxml XML 解析器BeautifulSoup(markup, ["lxml-xml"])``BeautifulSoup(markup, "xml")速度快唯一支持XML的解析器需要安装C语言库
html5libBeautifulSoup(markup, "html5lib")最好的容错性以浏览器的方式解析文档生成HTML5格式的文档速度慢不依赖外部扩展

 

安装与配置

# 安装requests模块
pip install requests==2.10.0
# 安装beautiful soup4
pip install bs4
# 安装lxml解析器
pip install lxml

解析数据

每个tag都有自己的名字,通过soup.name来获取标签。

# 获取p标签
p = soup.p
print(p)
# 获取title标签
title = soup.title
print(title)

属性
  • 获取指定标签的单一属性,类似字典方式

# 获取p标签的class属性
attrs = soup.p["class"]
print(attrs)

  • 获取指定标签的单一属性,通过attrs方式

# 通过attrs获取p标签的id属性
id_ = soup.p.attrs["id"]
print(id_)

  • 获取指定标签的所有属性:

  • # 获取指定标签的所有属性
    p_attrs = soup.p.attrs
    print(p_attrs)

标签内容

# 获取单个标签的内容
text = soup.p.text
print(text)
print(soup.p.string)
# 获取该标签下所有的内容,返回generator生成器
strings = soup.div.strings
for st in strings:
    print(st)

遍历文档树

子节点

# tag小技巧获取层级子节点
print(soup.body.div.p)

.contents:将标签的子节点以列表的方式输出

# 获取div标签下的所有子节点
print(soup.body.div.contents)
# 获取div标签下的第二个子节点
print(soup.body.div.contents[1])
# 获取div标签下的第二个子节点的标签名
print(soup.body.div.contents[1].name)
# 获取div标签下的第二个子节点的所有属性
print(soup.body.div.contents[1].attrs)

.children:对标签的子节点进行循环

# 获取div下的的子节点
children = soup.body.div.children
print(children)
# 循环打印节点信息
for child in children:
    print(child)

.descendants:对所有标签的子孙节点进行递归循环

descendants = soup.body.descendants
for des in descendants:
    print(des)

父节点

.parent:获取某个元素的父节点

print(soup.p.parent)

.parents:递归得到元素的所有父辈节点

parents = soup.p.parents
for p in parents:
    print(p)

兄弟节点

.next_sibling:获取下级单个兄弟节点

print(soup.p.next_sibling.next_sibling)

.previous_sibling:获取上级单个兄弟节点

print(soup.body.previous_sibling.previous_sibling)

搜索文档树

find

find方法,语法格式如下:

find( name , attrs , recursive , string , **kwargs )

参数说明:

参数说明
name需要查找的标签名,可以是字符串、正则表达式、列表或True
attrs需要查找的标签的属性,可以是字典类型或关键字参数
recursive是否递归地搜索子标签,默认为True,即会搜索所有子孙标签
string需要查找的标签中包含的文本内容
kwargs其他属性条件

通过find方法搜索指定的标签。

print(soup.find('p', class_="aa"))
print(soup.find('p', class_="aa", id="username"))

注意:class类样式的处理。

True 可以匹配任何值,如下示例返回第一个节点:

print(soup.find(True))

更多内容请查看官网

find_all

find_all()方法的基本语法如下:

find_all(name=None, attrs={}, recursive=True, text=None, limit=None, **kwargs)

参数说明:

参数说明
name需要查找的标签名,可以是字符串、正则表达式、列表或True
attrs需要查找的标签的属性,可以是字典类型或关键字参数
recursive是否递归地搜索子标签,默认为True,即会搜索所有子孙标签
text需要查找的标签中包含的文本内容
limit限制返回的结果数量,可以传入一个整数值

返回值:

  • 如果找到满足条件的元素,则返回一个包含这些元素的列表。

  • 如果未找到满足条件的元素,则返回一个空列表。

find_add方法搜索当前标签下所有子节点,并判断是否符合过滤器的条件。

all = soup.find_all('p')
for a in all:
    print(a)
print(soup.find_all(["p", "input"]))

更多内容请查看官网

css选择器

Beautiful Soup支持大部分的CSS选择器。在 TagBeautifulSoup 对象的 .select() 方法中传入字符串参数, 即可使用CSS选择器的语法找到标签:

print(soup.select("title"))
print(soup.select("body div"))
print(soup.select("p.aa"))

标签:网页,Python,标签,find,soup,print,div,解析,节点
From: https://blog.csdn.net/2301_80332388/article/details/139203999

相关文章

  • day9数据解析
    正则表达式:规则表达式,文本排列规则的表达式//独立的编程语言//把自己想输出的统一成一套规则1.【元字符】//通配符.字符集「」re.findall(正则模式,文本)基于正则模式查询所有匹配的文本内容ret1=refindall//通配符.除换行符以外都能匹配的字符集^//取反/d匹配成......
  • MahApps.Metro的MVVM模式解析(二) 主题功能
    MahApps.Metro的MVVM模式解析(二)主题功能MahApps.Metro是一个开源的WPF框架,旨在为WPF应用程序提供现代和漂亮的用户界面。在MahApps.Metro中提供了切换主题的功能。经过多日的筛选和分析,在本文来理清它的脉络。1主题功能演示主题列表:白天主题效果:夜晚主题效果:2软件架构......
  • 1915springboot VUE 宠物寄养平台系统开发mysql数据库web结构java编程计算机网页源码m
    一、源码特点 springbootVUE宠物寄养平台系统是一套完善的完整信息管理类型系统,结合springboot框架和VUE完成本系统,对理解JSPjava编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/S模式开发。springbootVUE宠物寄养......
  • RabbitMQ(python)
     一、认识MQMQ全称为MessageQueue消息队列(MQ)是一种应用程序对应用程序的通信方法。MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取队列中的消息。这样发布者和使用者都不用知道对方的存在。生产者消费者模式是通过一个容器来解决生......
  • PD还是QC?快充协议全解析
    摘自:https://zhuanlan.zhihu.com/p/646357568 快充技术在现代生活中的重要性不言而喻,它大大提高了充电效率,使人们可以在短时间内为设备充满电,从而提高生活和工作效率。同时,快速充电技术的发展也推动了电池技术、半导体材料技术等相关领域的进步,为科技创新提供了可能。然而,我们......
  • Python基于微信小程序的农产品溯源平台论文(1)
    目录1绪论41.1项目研究的背景41.2开发意义41.3项目研究内容与结构42开发技术介绍52.1B/S架构52.2小程序平台52.3python语言简介52.4MySQL介绍62.5MySQL环境配置82.6Django框架83系统分析93.1可行性分析93.1.1技术可行性93.1.2经济可行性......
  • python 批导
    安装官网https://www.python.org/ 安装教程https://blog.csdn.net/weixin_42212924/article/details/124979123 https://www.cnblogs.com/missjade/p/12992038.htmlPip源设置(使用清华源) 1、临时使用1pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simpleso......
  • 解读注意力机制原理,教你使用Python实现深度学习模型
    本文分享自华为云社区《使用Python实现深度学习模型:注意力机制(Attention)》,作者:Echo_Wish。在深度学习的世界里,注意力机制(AttentionMechanism)是一种强大的技术,被广泛应用于自然语言处理(NLP)和计算机视觉(CV)领域。它可以帮助模型在处理复杂任务时更加关注重要信息,从而提高性能。在本......
  • Python筑基之旅-文件(夹)和流
    目录一、文件操作1、文件打开与关闭2、文件读写3、文件操作模式4、文件编码二、文件夹操作1、创建文件夹2、删除文件夹3、改变当前工作目录4、获取当前工作目录5、检查文件/文件夹是否存在6、遍历文件夹三、文件路径操作1、获取绝对路径2、构建完整路径3、检查......
  • 5分钟明白LangChain 的输出解析器和链
    本文介绍LangChain的输出解析器OutputParser的使用,和基于LangChain的LCEL构建链。1.输出解析器OutputParser1.1、为什么需要OutputParser常规的使用LangChain构建LLM应用的流程是:Prompt输入、调用LLM、LLM输出。有时候我们期望LLM给到的数据是格式化的数据,方便做后续的处......