BeautifulSoup解析模块
简介:
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解析模块的更多相关文章
- Python爬虫 | Beautifulsoup解析html页面
引入 大多数情况下的需求,我们都会指定去使用聚焦爬虫,也就是爬取页面中指定部分的数据值,而不是整个页面的数据.因此,在聚焦爬虫中使用数据解析.所以,我们的数据爬取的流程为: 指定url 基于reque ...
- 浩哥解析MyBatis源码(十一)——Parsing解析模块之通用标记解析器(GenericTokenParser)与标记处理器(TokenHandler)
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6724223.html 1.回顾 上面的几篇解析了类型模块,在MyBatis中类型模块包含的 ...
- python命令行参数解析模块argparse和docopt
http://blog.csdn.net/pipisorry/article/details/53046471 还有其他两个模块实现这一功能,getopt(等同于C语言中的getopt())和弃用的o ...
- MyBatis源码解析(十一)——Parsing解析模块之通用标记解析器(GenericTokenParser)与标记处理器(TokenHandler)
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6724223.html 1.回顾 上面的几篇解析了类型模块,在MyBatis中类型模块包含的 ...
- BeautifulSoup解析器的选择
BeautifulSoup解析器 在我们使用BeautifulSoup的时候,选择怎样的解析器是至关重要的.使用不同的解析器有可能会出现不同的结果! 今天遇到一个坑,在解析某html的时候.使用htm ...
- python命令行解析模块--argparse
python命令行解析模块--argparse 目录 简介 详解ArgumentParser方法 详解add_argument方法 参考文档: https://www.jianshu.com/p/aa ...
- Python3.x的BeautifulSoup解析html常用函数
Python3.x的BeautifulSoup解析html常用函数 1,初始化: soup = BeautifulSoup(html) # html为html源代码字符串,type(html) == ...
- Python3.x:BeautifulSoup()解析网页内容出现乱码
Python3.x:BeautifulSoup()解析网页内容出现乱码 问题: start_html = requests.get(all_url, headers=Hostreferer) Beau ...
- $命令行参数解析模块argparse的用法
argparse是python内置的命令行参数解析模块,可以用来为程序配置功能丰富的命令行参数,方便使用,本文总结一下其基本用法. 测试脚本 把以下脚本存在argtest.py文件中: # codin ...
随机推荐
- Python爬虫之Requests库的基本使用
import requests response = requests.get('http://www.baidu.com/') print(type(response)) print(respons ...
- MySql 学习之路-聚合函数
下面是mysql 数据库中经常用到的聚合函数的简单实例 -- 创建学生表 create table student ( id int primary key auto_increment commen ...
- Python安装包:协程(gevent)
- 爬虫系列----scrapy爬取网页初始
一 基本流程 创建工程,工程名称为(cmd):firstblood: scrapy startproject firstblood 进入工程目录中(cmd):cd :./firstblood 创建爬虫 ...
- php使用root用户启动
一般情况下,肯定是不推荐使用root用户启动php的 但是在某些服务器管理想使用WEB的方式来控制操作的话,那么就必须要使用root用户才有权限操作 1.修改配置文件php-fpm.conf的启动用户 ...
- Vue项目中的RSA加解密
前后端使用rsa加密: 一般是客户端初始化时访问登录服务时,服务端面动态生成一对RSA对,公钥传给客户端,客户端拿到后,用户输入密码后,点登录时用公钥加密返回给服务端,服务端用私钥解就行了 一.安装 ...
- UOJ129 NOI2015 寿司晚宴 数论、状压DP
传送门 数论题\(n \leq 500\)肯定是什么暴力算法-- 注意到每一个数\(> \sqrt{n}\)的因子最多只有一个,这意味着\(> \sqrt{n}\)的因子之间是独立的,而只 ...
- 使用 xUnit 编写 ASP.NET Core 单元测试
还记得 .NET Framework 的 ASP.NET WebForm 吗?那个年代如果要在 Web 层做单元测试简直就是灾难啊..NET Core 吸取教训,在设计上考虑到了可测试性,就连 ASP ...
- 循环语句--do...while
do...while循环 格式: 执行流程 执行顺序:①③④>②③④>②③④…②不满足为止. ①负责完成循环变量初始化. ②负责判断是否满足循环条件,不满足则跳出循环. ③具体执行的语句 ...
- 证明与计算(4): 完美散列函数(Perfect Hash function)
原文:wiki: 完美散列函数 假设,写一个SQL语句解析器,词法分析对SQL语句解析,把语句分成了多个token,一般这个时候会需要查询这个token是否是一个关键字token. 例如keyword ...