python网络爬虫(5)BeautifulSoup的使用示范
创建并显示原始内容
其中的lxml第三方解释器加快解析速度
import bs4
from bs4 import BeautifulSoup
html_str = """
<html><head><title>The Dormouse's story</title></head>
<body>
<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>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""
soup = BeautifulSoup(html_str,'lxml')
print(soup.prettify())
控制台显示出soup需要处理的内容:
提取对象内容和属性
搜索包括了所有的标签。默认提取第一个符合条件的标签。
提取Tag对象
其中,name用于显示标签名,去掉name则内容直接显示。
print(soup.name)
print(soup.title.name)
print(soup.title)
print(soup.a)
控制台输出效果如下:
显示属性
attrs用于显示属性。class用于显示选中的标签Tag中的类名。
print(soup.p['class'])
print(soup.p.attrs)
输出结果:
内容文字
显示标记中的文字,NavigableString类型
print(soup.p.string)
print(type(soup.p.string))
效果:
显示注释
显示注释内容,注意与普通string的区别在于最后的类,用于数据分类
print(soup.a.string)
print(type(soup.a.string))
文档相关结点
直接子节点数组
结点中的contents输出直接子节点数组,可以通过for逐个输出,通过string属性直接输出内容
print(soup.body.contents)
输出body标签下的直接子节点:
结点children输出直接子节点,和contents类似。不一样的是返回了生成器,一点参考:https://www.cnblogs.com/wj-1314/p/8490822.html
for i in soup.body.children:print(i,end='')
添加了end=''用于去掉print的自动换行
子、孙节点
结点descendants可以输出子节点和孙节点
for i in soup.body.descendants:print(i)
效果:
节点strings输出全部子节点内容值
print(soup.strings)print('------------------------')
for text in soup.strings:print(text,end='')
效果:
节点stripped_strings输出全部内容并去掉回车和空格
for text in soup.stripped_strings:print(text)
print每次输出加上换行后,效果:
父节点相关
父节点parent
print(soup.title)
print(soup.title.parent)
效果:
父辈节点parents,这里只输出名字就好了,否则内容过多
for i in soup.a.parents:print(i.name)
效果:
兄弟节点等
兄弟节点next_sibling,previous_sibling,另有 :next_siblings,previous_siblings
print(soup.p.next_sibling.next_sibling)
print(soup.p.previous_sibling)
效果:
前后节点:next_element,next_elements等......
BeautifulSoup的搜索方法
包括了find_all,find,find_parents等等,这里只举例find_all。
find_all中参数name查找名称标记
查找所有b标签
print(soup.find_all('b'))
输出:
查找所有b开头的标签
配合正则表达式使用
import re
for tag in soup.find_all(re.compile("^b")):print(tag.name)
输出:
查找a开头和b开头的标签
print(soup.find_all(["a", "b"]))
输出:(一个数组,过长)
查找所有标签,True可以匹配任何值
for tag in soup.find_all(True):print(tag.name)
输出:
自定义过滤
查找含有class和id属性的Tag标签
def hasClass_Id(tag):return tag.has_attr('class') and tag.has_attr('id')
print(soup.find_all(hasClass_Id))
效果:
查找关键词参数kwargs并输出
查找id参数为link2的标签
print(soup.find_all(id='link2'))
输出:
查找链接中含有elsie的标签
配合正则表达式
print(soup.find_all(href=re.compile("elsie")))
输出:
查找所有有id属性的标签
print(soup.find_all(id=True))
输出:
查找所有a标签且class内容为sister
print(soup.find_all("a", class_="sister"))
输出:
查找所有链接含有elsie的标签,id为link1
print(soup.find_all(href=re.compile("elsie"), id='link1'))
输出:
不能表达的属性的解决方案
在html5中有些属性不被支持,查找时,通过定义字典实现输出
data_soup = BeautifulSoup('<div data-foo="value">foo!</div>','lxml')
print(data_soup.find_all(attrs={"data-foo": "value"}))
输出:
通过text参数查找文本内容并过滤
输入:
print(soup.find_all(text=["Tillie", "Elsie", "Lacie"]))
print(soup.find_all(text=re.compile("Dormouse")))
输出:
通过limit参数限制查找数量
输入:
print(soup.find_all("a", limit=2))
输出只有两个:
通过recursive参数只查找直接子节点
soup位于根处
print(soup.find_all("title"))
print(soup.find_all("title", recursive=False))
输出:
使用CSS选择器查找
#直接查找title标签
print soup.select("title")
#逐层查找title标签
print soup.select("html head title")
#查找直接子节点
#查找head下的title标签
print soup.select("head > title")
#查找p下的id="link1"的标签
print soup.select("p > #link1")
#查找兄弟节点
#查找id="link1"之后class=sisiter的所有兄弟标签
print soup.select("#link1 ~ .sister")
#查找紧跟着id="link1"之后class=sisiter的子标签
print soup.select("#link1 + .sister")print soup.select(".sister")
print soup.select("[class~=sister]")print soup.select("#link1")
print soup.select("a#link2")print soup.select('a[href]')print soup.select('a[href="http://example.com/elsie"]')
print soup.select('a[href^="http://example.com/"]')
print soup.select('a[href$="tillie"]')
print soup.select('a[href*=".com/el"]')
输出:
转载于:https://www.cnblogs.com/bai2018/p/10964702.html
python网络爬虫(5)BeautifulSoup的使用示范相关推荐
- Python网络爬虫使用BeautifulSoup爬取网页内容并存入数据库案例
使用BeautifulSoup爬取网页内容并存入数据库案例 学习了Python网络爬虫,完成里一个比较完整的爬虫案例与大家分享 爬取地址:http://www.tipdm.com/cpzx/index ...
- 爬虫书籍-Python网络爬虫权威指南OCR库 NLTK 数据清洗 BeautifulSoup Lambda表达式 Scrapy 马尔可夫模型
Python网络爬虫权威指南 编辑推荐 适读人群 :需要抓取Web 数据的相关软件开发人员和研究人员 作为一种采集和理解网络上海量信息的方式,网页抓取技术变得越来越重要.而编写简单的自动化程序(网络爬 ...
- Python网络爬虫--BeautifulSoup库的基本元素
requests requests库可以看看这篇文章 http://blog.csdn.net/shanzhizi/article/details/50903748 最近在学习嵩天老师的Python网 ...
- [Python从零到壹] 五.网络爬虫之BeautifulSoup基础语法万字详解
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- python网络爬虫_Python网络爬虫——爬取视频网站源视频!
原标题:Python网络爬虫--爬取视频网站源视频! 学习前提 1.了解python基础语法 2.了解re.selenium.BeautifulSoup.os.requests等python第三方库 ...
- python网络爬虫权威指南 百度云-分析《Python网络爬虫权威指南第2版》PDF及代码...
对那些没有学过编程的人来说,计算机编程看着就像变魔术.如果编程是魔术(magic),那么网页抓取(Web scraping)就是巫术(wizardry),也就是运用"魔术"来实现精 ...
- 精通python网络爬虫-精通Python网络爬虫 PDF 高清版
给大家带来的一篇关于Python爬虫相关的电子书资源,介绍了关于Python.网络爬虫.核心技术.框架.项目实战方面的内容,本书是由机械工业出版社出版,格式为PDF,资源大小108.6 MB,韦玮编写 ...
- 精通python网络爬虫-精通Python网络爬虫:核心技术、框架与项目实战 PDF
给大家带来的一篇关于Python爬虫相关的电子书资源,介绍了关于Python.Python网络爬虫.Python核心技术.Python框架.Python项目实战方面的内容,本书是由机械工业出版社出版, ...
- python网络爬虫的基本步骤-详解Python网络爬虫功能的基本写法
网络爬虫,即Web Spider,是一个很形象的名字.把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛. 1. 网络爬虫的定义 网络蜘蛛是通过网页的链接地址来寻找网页的.从网站某一个 ...
- python网络爬虫的基本步骤-python爬虫入门需要哪些基础/python 网络爬虫教程
如何入门 Python 爬虫 入门个吊,放弃 python爬虫入门需要哪些基础 现在之所以有多的小伙伴热衷于爬虫技术,无外乎是因为爬我们做很多事情,比如搜索引擎.采集数据.广告过滤等,以Python为 ...
最新文章
- struts2+hibernate-jpa+Spring+maven 整合(1)
- (HDU)1056 --HangOver( 悬住)
- 深度学习(二十二)Dropout浅层理解
- log4cplus导致主进程不能退出问题解决
- 9.linux ntp服务器搭建
- 一键安装lamp环境 centos
- 国企公司java面试题_整理最全的Java笔试题库之问答题篇-国企笔试题库
- 地图标注不完整图片_“地图帝”不规范使用图件之Anton Balazh作品介绍
- Polarion软件下载安装使用试用
- Android内存分析工具
- 神经网络matlab 验证集,机器学习中训练集、验证集、测试集的定义和作用
- 小程序12306服务器,微信小程序12306来了!史上最详细体验出炉!
- uac管理员程序_有启用UAC的管理员快速打开程序的方法吗?
- Windows安装Gitea
- Python socket文件上传下载
- 微信小程序如何让storage过期
- Tableau阈值设置及其使用
- Python中的命名元组(namedtuple)到底是什么东西?干嘛用的?
- 树莓派编译ffmpeg支持x264硬解码播放视频
- 注册中心Consul
热门文章
- 数据结构与算法 —— 链表linked list(01)
- SSKeychain
- ubuntu下安装配置nfs
- MySQL运算符优先级顺序
- 团队开发框架(Developement Structure for Team),内容列表及整理计划
- 位置指纹法的实现(KNN)
- xcode 4 最低的要求是 10.6.6的版本,如果你是 10.6.3的版本,又不想升级的话。可以考虑通过修改版本号的方法进行安装
- Intent.ACTION_MAIN
- 区块链101:区块链的应用和用例是什么?
- 当javaScript从入门到提高前需要注意的细节:变量部分