简介:

Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.

使用

from bs4 import BeautifulSoup

html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="sister"><b>$37</b></p> <p class="story" id="p">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" >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>
"""

生成beautifulSoup对象:

方式一:
soup = BeautifulSoup(html_doc, "lxml")
print(soup) 方式二:
soup = BeautifulSoup(open('a.html'), "lxml")
print(soup) soup = BeautifulSoup(html_doc, "lxml")

常用获取方法:

自动补全
soup.prettify() print(soup.p)
获取p标签下的b标签
print(soup.p.b)
获取p标签下的b标签下的文本
print(soup.p.b.text) 找body内的所有标签
print(soup.body.contents) 获取p标签属性
print(soup.p.attrs) 获取p标签的孩子, 返回一个iter对象
print(list(soup.p.children)) 获取p标签的子子孙孙
print(list(soup.p.descendants)) 获取p标签的爸爸
print(soup.p.parent) 获取p标签的爸爸, 获取p标签的爸爸的爸爸, 获取p标签的爸爸的爸爸的爸爸
print(list(soup.p.parents)) 获取a标签内的href属性
print(soup.a.attrs['href'])

五种过滤器:

搜索文档树
1.文本查找

通过文本查找p标签
print(soup.find_all(name='p')) 通过文本查找文本为$37的p标签
print(soup.find_all(name='p', text='$37')) 通过文本查找id为link3的a标签
print(soup.find_all(name='a', attrs={"id": "link3"}))

2.正则查找

通过正则查找所有p标签

import re
print(soup.find_all(name=re.compile("^p"))) 通过正则查找所有a标签
print(soup.find_all(name=re.compile("^a"))) 通过正则查找所有id为link的p标签
print(soup.find_all(name="p", attrs={"id": re.compile("^link")})) 通过正则查找所有id为link的a标签
print(soup.find_all(name="a", attrs={"id": re.compile("^link")})) 通过正则查找所有class为story的p标签
print(soup.find_all(name="p", attrs={"class": re.compile("story")}))

3.列表

通过列表查找所有的a、p标签
print(soup.find_all(name=['p', 'a'])) 通过列表查找所有的正则匹配有Elsie的文本
print(soup.find_all(text=[re.compile("Elsie")])) 通过列表查找所有的正则匹配有Elsie的文本的a标签
print(soup.find_all(name=['a'], text=[re.compile("Elsie")])

4.True

获取所有标签
print(soup.find_all(name=True)) 获取所有有id的a标签
print(soup.find_all(name="a", attrs={"id": True})) # 获取所有有class的a标签
print(soup.find_all(name="a", attrs={"class": True}))

5.方法

def have_id_not_class(a):
# if tag.has_attr('id') and not tag.has_attr('class'):
# return tag
if a.has_attr('class') and not a.has_attr('id'):
return a 通过方法查找所有有class没id的标签
print(soup.find_all(have_id_not_class))

BeautifulSoup解析模块的更多相关文章

  1. Python爬虫 | Beautifulsoup解析html页面

    引入 大多数情况下的需求,我们都会指定去使用聚焦爬虫,也就是爬取页面中指定部分的数据值,而不是整个页面的数据.因此,在聚焦爬虫中使用数据解析.所以,我们的数据爬取的流程为: 指定url 基于reque ...

  2. 浩哥解析MyBatis源码(十一)——Parsing解析模块之通用标记解析器(GenericTokenParser)与标记处理器(TokenHandler)

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6724223.html 1.回顾 上面的几篇解析了类型模块,在MyBatis中类型模块包含的 ...

  3. python命令行参数解析模块argparse和docopt

    http://blog.csdn.net/pipisorry/article/details/53046471 还有其他两个模块实现这一功能,getopt(等同于C语言中的getopt())和弃用的o ...

  4. MyBatis源码解析(十一)——Parsing解析模块之通用标记解析器(GenericTokenParser)与标记处理器(TokenHandler)

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6724223.html 1.回顾 上面的几篇解析了类型模块,在MyBatis中类型模块包含的 ...

  5. BeautifulSoup解析器的选择

    BeautifulSoup解析器 在我们使用BeautifulSoup的时候,选择怎样的解析器是至关重要的.使用不同的解析器有可能会出现不同的结果! 今天遇到一个坑,在解析某html的时候.使用htm ...

  6. python命令行解析模块--argparse

    python命令行解析模块--argparse 目录 简介 详解ArgumentParser方法 详解add_argument方法 参考文档: https://www.jianshu.com/p/aa ...

  7. Python3.x的BeautifulSoup解析html常用函数

    Python3.x的BeautifulSoup解析html常用函数 1,初始化: soup = BeautifulSoup(html) # html为html源代码字符串,type(html) == ...

  8. Python3.x:BeautifulSoup()解析网页内容出现乱码

    Python3.x:BeautifulSoup()解析网页内容出现乱码 问题: start_html = requests.get(all_url, headers=Hostreferer) Beau ...

  9. $命令行参数解析模块argparse的用法

    argparse是python内置的命令行参数解析模块,可以用来为程序配置功能丰富的命令行参数,方便使用,本文总结一下其基本用法. 测试脚本 把以下脚本存在argtest.py文件中: # codin ...

随机推荐

  1. 用kali执行arp攻击-----------使对方断网

    实现原理 其主要原理是局域网内的"攻击机"通过冒充同网络号下的"受害者主机"的物理地址(mac地址),通过欺骗网关,让网关原来应该发给"受害者主机&q ...

  2. redis快照持久化和aof日志持久化

    持久化就是即使断电/重启需要存储的数据不会丢失,即将数据存储在设备中,一般存在硬盘内 redis的持久化有2种方式 :1-rdb快照  2-aof日志,可以通过配置redis.conf文件进行配置 r ...

  3. SQLServer数据事务日志操作

    日志备份 (log backup) 包括以前日志备份中未备份的所有日志记录的事务日志备份. (完整恢复模式) 使用SSMS数据库管理工具备份事务日志 1.连接数据库,选择数据库->右键点击-&g ...

  4. 我的第一个python web开发框架(35)——权限数据库结构设计

    接下来要做的是权限系统的数据库结构设计,在上一章我们了解了权限系统是通过什么来管理好权限的,我们选用其中比较常用的权限系统来实现当前项目管理要求. 下面是我们选择的权限系统关系模型: 从以上关系可以看 ...

  5. Python排序算法——冒泡排序

    有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10786904.html 一.冒泡排序(Bubb ...

  6. LOJ2831 JOISC2018 道路建设 LCT、树状数组

    传送门 题目的操作大概是:求某个点到根的链的逆序对,然后对这条链做区间赋值 求某个点到根的链,就是LCT中的access操作,所以我们每一次把access过后的链打上标记,就可以做到区间赋值了. 计算 ...

  7. Docker启动的问题解决笔记

    一.错误信息1:解决VM 与 Device/Credential Guard 不兼容  错误原因: 1.出现此问题的原因是Device Guard或Credential Guard与Workstati ...

  8. xadmin后台页面的自定制(2)重写钩子函数版

    由于项目有通过自定义页面来实现功能的需求,百度也查了很多资料,也没找到合适的方法,所以决定分析源码,通过对源码的分析,找到了此方法. 01-需求 首先,如果要在xadmin中展示一个数据管理页面,首先 ...

  9. 小小知识点(三)——MATLAB如何把三维图用二维图表示

    MATLAB程序: x=-1:0.1:1; [x y] = meshgrid(x); %grid data = load("filename.txt"); figure mesh( ...

  10. 家庭记账本小程序之改(java web基础版五)

    实现修改消费账单 1.main_left.jsp中该部分,调用Servlet中的list方法 2.Servlet中的list方法,调用Dao层的list方法,跳转到list.jsp页面 3.Dao层的 ...