用Beautiful Soup解析html源码
#xiaodeng
#python3
#用Beautiful Soup解析html源码 html_doc = """
<html>
<head>
<title>The Dormouse's story</title>
</head>
<body>
<b>测试</b>
<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>;
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
<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>
"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc,"html.parser") #1、补全html代码格式化输出
#print(soup.prettify()) #2、获取html页面标题
#print(soup.title.string)
"""
还有其他类似用法:
1)print(soup.title.title) #result:title
2)print(soup.title.name) #result:title
""" #3、查找所有的p标签和p标签的内容,返回一个list
#print(soup.find_all("p"))
#print(soup.find_all("a"))
#print(soup.find_all("title"))
"""
查找一条p标签记录,print(soup.p)
""" #4、查p标签下属性class的value值
#print(soup.p["class"]) #5、查找所有id="XXX"的标签及标签内容
#print(soup.find_all(id="link3")) #6、从文档中找到所有<a>标签的链接
"""
for key in soup.find_all("a"):
print(key.get("href"))
""" #7、从文档中获取所有的文字内容
#print(soup.get_text()) #8、探索标签数据类型
soup = BeautifulSoup('<b class="boldest">Extremely bold</b>',"html.parser")
tag = soup.b
#print(type(tag)) #<class 'bs4.element.Tag'> #9、获取标签名字,每个tag都有自己的名字,通过.name来获取
#print(soup.b.name) #10、操作标签属性
#一个tag可能有很多个属性.
# tag <b class="boldest"> 有一个 “class” 的属性,值为 “boldest” . tag的属性的操作方法与字典相同
#print(soup.b["class"]) #11、执行删除标签属性等操作
#del tag['class'] #12、正则表达式
#面例子中找出所有以b开头的标签,这表示<body>和<b>标签都应该被找到
"""
import re
soup = BeautifulSoup(html_doc,"html.parser")
for tag in soup.find_all(re.compile("^b")):
print(tag.name)
"""
import re
soup = BeautifulSoup(html_doc,"html.parser")
#print(soup.find_all(href=re.compile("tillie"))) #href中包含tillie的超链接 #13、列表形式的匹配(匹配a和p标签)
soup = BeautifulSoup(html_doc,"html.parser")
#print(soup.find_all(["a","p"])) #14、查找a标签下id="XXX"的标签及标签内容
# find_all( name , attrs , recursive , text , **kwargs )
# find_all() 方法搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件.这里有几个例子:
#print(soup.find_all("a",id="link3")) #15、查找a标签下class_="sister"的内容
#print(soup.find_all("a",class_="sister")) #16、通过text参数可以搜文档中的字符串内容.
#与name参数的可选值一样, text参数接受字符串,正则表达式,列表,True
#print(soup.find_all(text="Elsie"))
#print(soup.find_all(text=["Tillie", "Elsie", "Lacie"])) #17、限定查找标签的数量
#print(soup.find_all("a",limit=2)) #18、想搜索tag的直接子节点,可以使用参数 recursive=False
doc="""<html>
<head>
<title>The Dormouse's story</title>
</head>
</html>
"""
soup = BeautifulSoup(doc,"html.parser")
#print(soup.find_all("title",recursive=False)) #19、查找父节点,兄弟节点等办法(待研究) #20、查找title标签
soup = BeautifulSoup(html_doc,"html.parser")
#print(soup.select("title")) #21、找到某个tag标签下的直接子标签
#注意事项:p和b之前要空格,此写法"p>b"错误
#print(soup.select("p > b"))#查找p标签下的直接子标签b
#print(soup.select("body > b")) #22、通过CSS的类名查找class="sister"的标签
result=soup.select(".sister")
#print(result) #23、通过tag的id查找,soup.select("#link1")
result=soup.select("#link1")
#print(result)#[<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]
用Beautiful Soup解析html源码的更多相关文章
- Python解析器源码加密系列之(二):一次使用标准c的FILE*访问内存块的尝试
摘要:由于近期打算修改Python解释器以实现pyc文件的加密/解密,出于保密的要求,解密之后的数据只能放在内存中,不能写入到文件中.但是后续的解析pyc文件的代码又只能接受FILE*作为入参,所以就 ...
- HtmlAgilityPack --解析Html源码
最近项目需要从网络上抓取一下数据解析Html源码,奈何正则表达式难写,于是网上搜索找到了“ HtmlAgilityPack”类库,敏捷开发,果然效率非同寻常. 在此做笔记,写下心得,顺便给自己总结一下 ...
- mvc5 解析route源码实现自己的route系统
Asp.net mvc5 解析route源码实现自己的route系统 url route 路由系统的责任是找到匹配的路由,创建路由数据,并将请求分配给一个处理程序. 选择动作是 MVC 的处理程序 ...
- 浩哥解析MyBatis源码(十)——Type类型模块之类型处理器
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6715063.html 1.回顾 之前的两篇分别解析了类型别名注册器和类型处理器注册器,此二 ...
- 解析 ViewTreeObserver 源码(下)
继上篇内容,本文介绍 ViewTreeObserver 的使用,以及体会其所涉及的观察者模式,期间会附带回顾一些基础知识.最后,我们简单聊一下 Android 的消息传递,附高清示意图,轻松捋清整个传 ...
- Python爬虫之Beautiful Soup解析库的使用(五)
Python爬虫之Beautiful Soup解析库的使用 Beautiful Soup-介绍 Python第三方库,用于从HTML或XML中提取数据官方:http://www.crummv.com/ ...
- Jsoup解析网页源码时常用的Element(s)类
Jsoup解析网页源码时常用的Element(s)类 一.简介 该类是Node的直接子类,同样实现了可克隆接口.类声明:public class Element extends Node 它表示由一个 ...
- 爬虫5_python2_使用 Beautiful Soup 解析数据
使用 Beautiful Soup 解析数据(感谢东哥) 有的小伙伴们对写正则表达式的写法用得不熟练,没关系,我们还有一个更强大的工具,叫Beautiful Soup,有了它我们可以很方便地提取出HT ...
- 二十三、并发编程之深入解析Condition源码
二十三.并发编程之深入解析Condition源码 一.Condition简介 1.Object的wait和notify/notifyAll方法与Condition区别 任何一个java对象都继承于 ...
随机推荐
- FreeMarker:Java模板引擎
本资源由 伯乐在线 - 黄余粮 整理 FreeMarker 是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写.FreeMarker被设计用来生成HTML Web页面,特别是基于M ...
- LaTeX使用技巧
使用LaTex的方法: (1)推荐一个手写公式.自动生成LaTex的网站——Web Equation. (2)如果会LaTex,可以直接用在线LaTex编辑 (3)从mathtype转换: 首先打开文 ...
- 光流法(optical flow)
光流分为稠密光流和稀疏光流 光流(optic flow)是什么呢?名字很专业,感觉很陌生,但本质上,我们是最熟悉不过的了.因为这种视觉现象我们每天都在经历.从本质上说,光流就是你在这个运动着的世界里感 ...
- kafka-python的gevent模式和kafka的兼容性
使用gevent会杀死kafka的consumer线程:据查:kafka-python对gevent的支持不是太好,可以使用pykafka:但是可以kafka-python可以结合eventlet使用 ...
- Swift:宏定义
一.简述 swift中并没有加入宏系统,C语言使用#define定义的基本常量在导入Swift时被Swift编译自动转为Swfit语言的全局变量.但复杂的宏定义不能被Swift转换.Swift中类似宏 ...
- cesium原理篇(二)--网格划分【转】
转自:http://www.cnblogs.com/fuckgiser/p/5772077.html 上一篇我们从宏观上介绍了Cesium的渲染过程,本章延续上一章的内容,详细介绍一下Cesium网格 ...
- win8 中如何删除 共享文件夹 用户名和密码
在访问共享文件夹时我们都喜欢选中记住用户名和密码,可是有时候密码输入错误或者密码修改了,这时就需要我们删除或则修改先前记住的用户名和密码记录. 首先进入:控制面板\所有控制面板项\凭据管理器 选择wi ...
- HTML5读取本地文件
本文转自:转:http://hushicai.com/2014/03/29/html5-du-qu-ben-di-wen-jian.html感谢大神分享. 常见的语言比如php.shell等,是如何读 ...
- Nginx限制某个IP同一时间段的访问次数和请求数示例代码
nginx可以通过ngx_http_limit_conn_module和ngx_http_limit_req_module配置来限制ip在同一时间段的访问次数. ngx_http_limit_conn ...
- SQLSERVER 免费对比数据库结构和数据的工具支持:SQL Server 2012, SQL Server 2008 and SQL Server 2005
New xSQL Schema Compare - version 5 Compare the schemas of two SQL Server databases, review differen ...