BeautifulSoup

BeautifulSoup将网页元素的正则化查找简单化。

from bs4 import BeautifulSouphtml_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
asdf<div class="title"><b>The Dormouse's story总共</b><h1>f</h1></div>
<div class="story">Once upon a time there were three little sisters; and their names were<a  class="sister0" id="link1">Els<span>f</span>ie</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.</div>
ad<br/>sf
<p class="story">...</p>
</body>
</html>
"""soup = BeautifulSoup(html_doc, features="lxml")
# 找到第一个a标签, 返回对象
tag1 = soup.find(name='a')
# 找到所有的a标签,返回对象
tag2 = soup.find_all(name='a')
# 找到id=link2的标签,返回对象,css选择器语法
tag3 = soup.select('#link2')

使用示例

from bs4 import BeautifulSouphtml_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>...
</body>
</html>
"""soup = BeautifulSoup(html_doc, features="lxml")

1. 获取和设置标签名称

tag = soup.find('a')
name = tag.name # 获取
print(name)
tag.name = 'span' # 设置
print(soup)

2. 获取和设置标签属性

tag = soup.find('a')
attrs = tag.attrs    # 获取
print(attrs)
tag.attrs = {'ik':123} # 设置
tag.attrs['id'] = 'iiiii' # 设置
print(soup)

3. 按名称查找某标签

# soup查找tag名称
tag = soup.find('a')
print (tag)

4. 按类查找某标签

# soup查找类名称(属性)
# 方法一
tag = soup.find(class_= 'ConsTi')
print(tag)
# 方法二
tag = soup.find(attrs={'class': 'ConsTi'})
print(tag)

4. 按ID查找某标签

# soup查找id(属性)
tag = soup.find(id = 'banner')
print(tag)
tag = soup.find(attrs = {'id':'banner'})
print(tag)

5. 获取子节点和子孙节点

# 获取子节点,且剔除字符串对象,例如换行符
# 在获取子节点的时候,有Navigable和Tag两类对象,Navigable中经常存储换行符之类的对象。
from bs4.element import Tag
tags = tag.children
for i in tags:if type(i) ==  Tag:print(i)else:print('string type')# 获取子孙节点,深度优先搜索
tags = tag.descendants
print([i for i in tags])

6. 清楚节点下内容

# 清空所有节点
# 1. 保留标签名
tag.clear()
# 2. 全部删除
tag.decompose()
# 3. 全部删除,并且将删除的内容返回
tag.extract()

7. 将tag转化为字符串

# 将tag对象转化为字符串
tag.decode() # 同上,获取字符串
str(tag) # 同上,获取字符串
tag.encode()#获取字节类型

8. find方法细说

tag = soup.find('a')
print(tag)
# recursive = True 深度优先搜索
# recursive = False 广度优先搜索,且单面
# text 文本匹配
tag = soup.find(name='a', attrs={'class': 'sister'}, recursive=True, text='Lacie')
tag = soup.find(name='a', class_='sister', recursive=True, text='Lacie')
print(tag)

9. find_all方法细说

上述find()的方法同样适应于find_all()

# 列表内元素逻辑上为或关系
v = soup.find_all(name=['a','div'])
print(v)v = soup.find_all(class_=['sister0', 'sister'])
print(v)v = soup.find_all(text=['Tillie'])
print(v, type(v[0]))v = soup.find_all(id=['link1','link2'])
print(v)v = soup.find_all(href=['link1','link2'])
print(v)

10.正则查找

####### 正则 #######
import re
rep = re.compile('p')
rep = re.compile('^p')
v = soup.find_all(name=rep)
print(v)rep = re.compile('sister.*')
v = soup.find_all(class_=rep)
print(v)rep = re.compile('http://www.oldboy.com/static/.*')
v = soup.find_all(href=rep)
print(v)

11.其他补充

# 是否有特定属性
tag.has_attr('id')# 获取内部文本内容
v = tag.get_text()# 获取标签属性
tag = soup.find('a')
v = tag.get('id')
print(v)

12.查找索引

# print the index and the content
tag = soup.find('body')
for i,v in enumerate(tag):print(i,v)

13. 判断自闭合标签

‘br’ , ‘hr’, ‘input’, ‘img’, ‘meta’,’spacer’, ‘link’, ‘frame’, ‘base’

tag = soup.find('br')
v = tag.is_empty_element
print(v)

14. CSS选择器

soup.select("title")soup.select("p nth-of-type(3)")soup.select("body a")soup.select("html head title")tag = soup.select("span,a")soup.select("head > title")soup.select("p > a")soup.select("p > a:nth-of-type(2)")soup.select("p > #link1")soup.select("body > a")soup.select("#link1 ~ .sister")soup.select("#link1 + .sister")soup.select(".sister")soup.select("[class~=sister]")soup.select("#link1")

参考:https://www.cnblogs.com/wupeiqi/articles/6283017.html

python - BeautifulSoup教程相关推荐

  1. Python培训教程分享:有哪些值得使用的爬虫开源项目?

    相信很多同学在学习Python技术的时候,都有学习到Python爬虫技术,爬虫技术在各大互联网公司都是非常常见的,可以帮助我们获取各种网站的信息,比如微博.B站.知乎等,本篇Python培训教程分享为 ...

  2. Calibre 3.38.1 下载 Runoob 网站中的《Python 2 教程》的 Recipe

    代码如下: 1 #!/usr/bin/env python2 2 # vim:fileencoding=utf-8 3 from __future__ import unicode_literals, ...

  3. Python爬虫入门教程:超级简单的Python爬虫教程

    这是一篇详细介绍 [Python]爬虫入门的教程,从实战出发,适合初学者.读者只需在阅读过程紧跟文章思路,理清相应的实现代码,30 分钟即可学会编写简单的 Python 爬虫. 这篇 Python 爬 ...

  4. 超级简单的Python爬虫教程,python爬虫菜鸟教程官网

    毫无基础的人如何入门 Python ? Python是一种计算机程序设计语言.你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网页编 ...

  5. python抓取股票竞价数据_【整理】用Python+beautifulsoup抓取股票数据

    [刚开始写总结,读者如果对我的内容有任何建议欢迎留言反馈,或直接加QQ1172617666,期待交流] 先贴上代码,再详细的写一下在写这些代码的过程中遇到的问题,解决的方法. 这些代码完成的任务是:访 ...

  6. 【Python学习教程】Python编程基础

    文章目录 编程语言是什么 编译型语言和解释型语言的区别 编译型语言 1) 可执行程序不能跨平台 2) 源代码不能跨平台 解释型语言 关于 Python 总结 Python是什么,Python简介 Py ...

  7. python零基础入门教程视频下载-零基础学Python入门教程,视频资源下载

    课程名称 零基础学Python入门教程,视频资源下载 课程目录 第一章 :Python介绍和安装 01.Python语言的特点 02.Python的发展历史与版本 03.Python的安装 第二章 : ...

  8. 在职爬虫工程师,带给大家超简单 Python 爬虫教程

    本篇 Python 爬虫教程主要讲解以下5部分内容,请按照顺序进行学习. 爬虫概述:介绍什么是爬虫,爬虫的目的和应用. 爬虫基础知识:介绍爬虫的基本概念,例如网络协议,HTML 结构,CSS 样式表等 ...

  9. 【Python】Python学习教程与资源链接

    一.Python基础 Python简明教程(Python3) Python3.7.4官方中文文档 Python标准库中文版 廖雪峰 Python 3 中文教程 Python 3.3 官方教程中文版 P ...

最新文章

  1. 201621123069 《Java程序设计》第十一周学习总结
  2. (原创)按照一定的格式生成一定数量的随机数的例子
  3. linux 脚本学习--细节问题
  4. python如何在exel中编程_如何使用Python以编程方式将行添加到现有Excel表中
  5. Linux常用的基本命令08
  6. python贪吃蛇_python贪吃蛇
  7. 计算机一级移动是复制粘贴吗,学会着几种复制粘贴的方法你做事会事半功倍
  8. 【软件测试】软件测试为什么会用到Linux?
  9. 测量学—误差理论与测量平差基础
  10. 一文搞懂如何使用封锁来实现并发控制
  11. 【译】 on the expressive power of deep architectures
  12. word java_java操作word
  13. (PTA)数据结构(作业)8、期中测验
  14. 常用软件安装及破解——IntelliJ IDEA
  15. 上面两点下面一个三角形_解三角形的新视野——定角对定边~
  16. Jetson Nano通过笔记本实现网络连接
  17. 【人工智能实验】运用贝叶斯决策理论实现手写数字识别
  18. nodejs+IIS+WebMatrix
  19. 完整的 Markdown 新手指南
  20. cs python课程 加州大学_加州大学伯克利分校是如何培养计算机学生的

热门文章

  1. JAVA_数组的截取
  2. 数字转字符串;字符串转数字
  3. 根据光时域反射仪原理飞凌提供专业性的应用方案
  4. 当Sklearn遇上Plotly,机器学习变得如此简单、易于理解
  5. 过来人教你如何系统学STM32
  6. 自己动手写操作系统--搭建保护模式下的运行环境:bochs下安装freedos
  7. OpenPlanner变道遇到的问题及解决
  8. objectArx---AcGe几何类
  9. 回调陷阱的概念及解决方法
  10. 《策略驱动型数据中心——ACI技术详解》——1.3 数据中心设计