转自:微点阅读  https://www.weidianyuedu.com

一、强大的BeautifulSoup:BeautifulSoup是一个可以从html或xml文件中提取数据的Python库。它能够通过你喜欢的转换器实现惯用的文档导航、查找、修改文档的方式。在Python开发中,主要用的是BeautifulSoup的查找提取功能,修改功能很少使用

1、安装BeautifulSoup

pip3 install beautifulsoup4

2、安装第三方html解析器lxml

pip3 install lxml

3、安装纯Python实现的html5lib解析器

pip3 install html5lib

二、BeautifulSoup的使用:

1、导入bs4库

frombs4 import BeautifulSoup #导入bs4库

2、创建包含html代码的字符串

html_str= """

<html><head><title>TheDormouse"s story</title></head>

<body>

<pclass="title"><b>The Dormouse"s stopy</b></p>

<pclass="story">Once upon a time there were three littlesisters;and their names where

<ahref="http://example.com/elsie" class="sister"id="link1"><!--Elsie--></a>

"""

3、创建BeautifulSoup对象

(1)直接通过字符串方式创建

soup= BeautifulSoup(html_str,"lxml")#html.parser是解析器,也可是lxml

print(soup.prettify())------>输出soup对象的内容

(2)通过已有的文件来创建

soup= BeautifulSoup(open("/home/index.html"),features="html.parser")#html.parser是解析器,也可是lxml

4、BeautifulSoup对象的种类:BeautifulSoup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象

(1)BeautifulSoup:表示的是一个文档的全部内容。大部分时候,可以把它当作Tag对象,是一个特殊的Tag,因为BeautifulSoup对象并不是真正的HTML和XML,所以没有name和attribute属性

(2)Tag:与XML或HTML原生文档中的Tag相同,通俗讲就是标记

如:

抽取title:print(soup.title)

抽取a:print(soup.a)

抽取p:print(soup.p)

Tag中有两个重要的属性:name和attributes。每个Tag都有自己的名字,通过.name来获取

print(soup.title.name)

操作Tag属性的方法和操作字典相同

如:<pclass=’p1’>Hello World</p>

print(soup.p[‘class’])

也可以直接“点”取属性,如 .attrs获取Tag中所有属性

print(soup.p.attrs)

(3)NavigableString:获取标记内部的文字.string

BeautifulSoup用NavigableString类来封装Tag中的字符串,一个NavigableString字符串与Python中的Unicode字符串相同,通过unicode()方法可以直接将NavigableString对象转换成Unicode字符串

如:u_string= unicode(soup.p.string)

(4)Comment:对于一些特殊对象,如果不清楚这个标记.string的情况下,可能造成数据提取混乱。因此在提取字符串时,可以判断下类型:

if type(soup.a.string) == bs4.element.Comment:

print(soup.a.string)

5、遍历文档

(1)子节点:

A、对于直接子节点可以通过.contents和 .children来访问

.contents---->将Tag子节点以列表的方式输出

print(soup.head.contents)

.children----->返回一个生成器,对Tag子节点进行循环

for child in soup.head.children:

print(child)

B、获取子节点的内容

.string --->如果标记里没有标记了,则返回内容;如果标记里只有一个唯一的标记,则返回最里面的内容;如果包含多个子节点,Tag无法确定.string方法应该返回哪个时,则返回None

.strings---->主要应用于Tag中包含多个字符串的情况,可以进行循环遍历

for str in soup.strings:

print(repr(str))

.stripped_string----->可以去掉字符串中包含的空格或空行

for str in soup.stripped_strings:

print(repr(str))

(2)父节点

A、通过.parent属性来获取某个元素的父节点,如:

print(soup.title.parent)

B、通过.parents属性可以递归得到元素的所有父辈节点

for parent in soup.a.parents:

if parent is None:

print(parent)

else:

print(parent.name)

(3)兄弟节点

.next_sibling----->获取该节点的下一个兄弟节点

.previous_sibling ----->获取该节点的上一个兄弟节点

(4)前后节点

.next_elements ----->获得该节点前面的所有节点

.previous_elements ----->获得该节点后面的所有节点

6、搜索文档树

(1)find_all(name,attrs,recursive,text,**kwargs)

A、name参数:查找名字为name的标记

print(soup.find_all(‘‘’’b))

B、text参数:查找文档中字符串的内容

C、recursive参数:检索当前Tag的所有子孙节点时,若只想找直接子节点, 该参数设置为False

7、CSS选择器:使用soup.select()函数

(1)通过标记名查找

print(soup.select("title"))

(2)通过Tag的class属性值查找

print(soup.select(".sister"))

(3)通过Tag的id属性值查找

print(soup.select("#sister"))

(4)通过是否存在某个属性查找

print(soup.select("a[href]"))

(5)通过属性值查找

print(soup.select("a[href=""]"))

Python之HTML解析方法相关推荐

  1. Python之Html解析方法(beautiful soup)

    Python之Html解析方法(beautiful soup) BeautifulSoup的安装及介绍 官方给出的几点介绍: Beautiful Soup提供一些简单的.python式的函数用来处理导 ...

  2. python爬虫详细步骤-Python爬虫的两套解析方法和四种爬虫实现过程

    对于大多数朋友而言,爬虫绝对是学习 python 的最好的起手和入门方式.因为爬虫思维模式固定,编程模式也相对简单,一般在细节处理上积累一些经验都可以成功入门.本文想针对某一网页对 python 基础 ...

  3. python xml添加命名空间_XML的命名空间与python解析方法

    在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突,而XML 命名空间提供避免元素命名冲突的方法. XML 命名空间属性被放置于元素的开始标签之中,并使用以 ...

  4. python分析pcap文件_利用Python库Scapy解析pcap文件的方法

    每次写博客都是源于纳闷,python解析pcap这么常用的例子网上竟然没有,全是一堆命令行执行的python,能用吗?玩呢? pip安装scapy,然后解析pcap: import scapy fro ...

  5. Python XML解析方法

    XML介绍 XML(eXtensible Markup Language,可扩展标记语言):一种用于标记电子文件使其具有结构性的标记语言,被用来传输和存储数据 XML文档结构:一种树结构,从根部开始, ...

  6. python新式类c3算法_Python 新式类继承关系的 C3 算法(Python 2.3 的方法解析顺序,MRO)...

    Python 新式类继承关系的 C3 算法(Python 2.3 的方法解析顺序,MRO) 翻译:刘硕 摘要:本文档面向于想要了解Python 2.3版本中 C3 方法解析顺序的 Python程序开发 ...

  7. 用python解析xml的几种方法,Python_XML的三种解析方法

    什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据. XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这 ...

  8. Python爬虫beautifulsoup4常用的解析方法总结

    摘要 如何用beautifulsoup4解析各种情况的网页 beautifulsoup4的使用 关于beautifulsoup4,官网已经讲的很详细了,我这里就把一些常用的解析方法做个总结,方便查阅. ...

  9. python方法定义..._解析Python类中的方法定义

    最近在学习类过程中,绑定方法这个概念没有理解透彻,所以在网上找了很多相关博客.文章研究到底是怎么一回事.因为有的文章所陈述与我在python3.5版本实际实验中有些出入,所以经过实践后总结出以下结论. ...

最新文章

  1. linux vim6,VIM6:linux终端下的英文字典--SDCV
  2. Win10 新版又悲剧了!老外神评论
  3. JAVA开发:开发属于你的第一个Java程序
  4. ACL Beginner Contest 总结——F多项式待补
  5. 刚安装Vs2008,安装时它弹出了一个一些常见问题的解决方案页,记录下
  6. html能插入背景的行级元素,Html元素类型:块级元素、行内元素(内联元素)和行内块级元素...
  7. 什么是计算机系统计算机硬件和计算机软件,什么是计算机系统、计算机硬件和计算机软件?硬件和软件哪个更重要?...
  8. 【译】前端框架技术选型 React vs. Vue (vs. Angular)
  9. BlogEngine
  10. 洛谷 3203 HNOI2010 BOUNCE 弹飞绵羊
  11. DataReader,DataTable利用泛型填充实体类
  12. 华为ENSP远程登录
  13. 树莓派ubuntu默认用户名密码及密码修改
  14. linux df -hl 数据解释,linux磁盘空间查看命令(du,df)剩余空间查看详解
  15. 某一api全开源网站源码
  16. 大数据基础课第一课 Hadoop详解
  17. 《心灵捕手》经典台词
  18. 基于vue2 + Muse-ui 开发的移动端轻社区项目 F-Rent
  19. Win10安装Docker和k8s
  20. 大腿根部发黑怎么样白,变白方法

热门文章

  1. 神奇!教你如何用Python来画树
  2. 22-05-15 西安 javaweb(01) html 、css、javaScript
  3. Lecture 13-1
  4. 洛谷 U266184 宠物小精灵之收服
  5. Scala匿名函数Lambda表达式详解
  6. spring 事物监听机制,同步异步处理
  7. 关于struts2的通配符问题
  8. 使用Metasploit生成攻击载荷——msfvenom免杀、upx加壳
  9. 深度学习用什么显卡?3060显卡适合深度学习吗?
  10. 2021年美容师(初级)考试技巧及美容师(初级)复审考试