用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对象都继承于 ...
随机推荐
- C# 获取文件的MIME类型
在C#中获取文件的MIME类型(Content Type)的方法如下 一.使用MimeMapping类 在System.Web程序集中,当前为静态类,就一个获取 // // 摘要: // 映射文档扩展 ...
- Zookeeper Tutorial 1 -- Overview
ZooKepper: 一个分布式应用的分布式协调服务(Distributed Coordination Service) 分布式服务难以管理, 他们容易造成死锁和竞争, ZooKepper的动机就是为 ...
- POJ训练计划2528_Mayor's posters(线段树/成段更新+离散化)
解题报告 id=2528">地址传送门 题意: 一些海报,覆盖上去后还能看到几张. 思路: 第一道离散化的题. 离散化的意思就是区间压缩然后映射. 给你这么几个区间[1,300000] ...
- 第三十一章 elk(2)- 第二种架构(最常用架构)
参考:http://linuxg.blog.51cto.com/4410110/1761757 最常用架构: 一.安装redis 1.下载:http://redis.io/download 2.解压后 ...
- 我眼中的SCRUM
回顾一下我所认识的scrum,算是对自己知识的一个梳理. scrum到底是什么,书中都说,它不是方法学,不是过程,而是一个框架.我并没有太理解这句话,所以先把scrum中都有些什么来说一下(可跟前一篇 ...
- Go语言之高级篇beego框架之参数配置与路由配置
一.参数配置 beego默认会解析当前应用下的conf/app.conf文件 1.1.beego的参数配置 appname = WEB httpport = 8080 runmode = dev 几种 ...
- Go语言之进阶篇mysql增 删 改 查
一.mysql操作基本语法 1.创建名称nulige的数据库 CREATE DATABASE nulige DEFAULT CHARSET utf8 COLLATE utf8_general_ci; ...
- 遮罩层中的相对定位与绝对定位(Ajax)
前提:公司最近做的一个项目列表,然后点击项目,出现背景遮罩层,弹出的数据框需要异步加载数据数据,让这个数据框居中,搞了两天终于总算达到Boss满意的程度,做了半年C/S,反过来做B/S,顿时感到技术还 ...
- 揭秘uc浏览器四
请问大家用过uc浏览器,他收藏一个网页是怎么操作的? 是不是这样,按菜单键——弹出添加网页,收藏网页等等的菜单操作,这个菜单操作很人性化了,并且在前面的篇幅已经说过了,这里不做太多的赘述了. 我这里只 ...
- [Python爬虫] :Selenium +phantomjs 利用 pyquery抓取脚本链接对应的内容
抓取上面对应链接的网页的文章的内容 ele = element.attr("onclick") self.driver.execute_script(ele) sub_seleni ...