BeautifulSoup(BS4)的基本使用

一、BeautifulSoup简介

    Xpath和BeautifulSoup都是基于DOM的一种操作模式。
    不同点在于加载文档对象模型DOM时出现的文档节点遍历查询操作过程,Xpath在进行遍历操作时针对描述语言指定的
语法结构进行局部DOM对象树的遍历得到具体的数据,但是BS4在操作过程中,会将整个文档树进行加载然后进行查询匹配
操作,使用过程中消耗资源较多,处理性能相对Xpath较低那么为什么要用BS4呢?因为,它,足够简单!

二、BeautifulSoup安装

- pip install bs4

三、BeautifulSoup基本使用

  • 导包
- from bs4 import BeautifulSoup
  • 加载html
1)从本地文件加载html
  - soup = BeautifulSoup(open("./soup_test.html",encoding='utf-8'),"lxml") 
2)从网页爬取到的html数据
  - soup = BeautifulSoup(html,"lxml") 

四、BeautifulSoup基本语法

  • 标签
print(soup.title) # <title>文章标题</title>
print(soup.p) # <p>姓名:<span id="name">大牧</span></p> # 只返回第一个匹配到的标签对象
print(soup.span) # <span id="name">大牧</span>
  • 属性(理解成字典)
print(soup.p.attrs) # {}:得到属性和值的字典
print(soup.span.attrs) # {'id': 'name'}:得到属性和值的字典
print(soup.span['id']) # name:得到指定属性的值
soup.span['id'] = "real_name"
print(soup.span['id']) # real_name : 可以方便的在BS4中直接对文档进行修改
  • 内容
print(soup.a.string)  # 获取都没有注释的内容 或者 获取都注释的内容 否则为None
print(soup.a.get_text()) # 只能获取没有注释的内容 有注释的无法获取
  • 子节点
print(soup.contents)# 得到文档对象中所有子节点
print(soup.div.contents)# 得到匹配到的第一个div的子节点列表
print(soup.div.children)# 得到匹配到的第一个div的子节点列表迭代器
# for e1 in soup.div.children:
#     print("-->", e1)
print(soup.div.descendants)# 得到匹配到的第一个div的子节点迭代器,所有后代节点单独一个一个列出
# for e2 in soup.div.descendants:
#     print("==>", e2)
  • 通过函数查找节点
print(soup.find('a')) # 查找第一个a标签
print(soup.find('a',id='hong')) # 查找id为hong的第一个a标签

print(soup.find_all('a')) # 查找所有的a标签,返回一个列表
print(soup.find_all(['a','span','li'])) # 查找所有的a、span、li标签,返回一个列表
print(soup.find_all(['a','span','li'],class='taohua')) # 查找所有的有class属性值为taohua的a、span、li标签
print(soup.find_all(['a','span','li'],limit=3)) # 查找所有的a、span、li标签,限制取前3条,返回一个列表

  • 通过css选择器查找节点(select函数)
# 1. CSS 标签选择器:根据标签名称查询标签对象
res1 = soup.select("span")
print(res1)

# 2. CSS ID选择器:根据ID查询标签对象
res2 = soup.select("#gender")
print(res2)

# 3. CSS 类选择器:根据class属性查询标签对象
res3 = soup.select(".intro")
print(res3)

# 4. CSS 属性选择器
res41 = soup.select("span[id]")
print(res41)
res42 = soup.select("span[id='gender']")
print(res42)

# 5. CSS 包含选择器
res5 = soup.select("p span#name")
print(res5)

# 6. 获取标签内容
res6 = soup.select("p > span.intro")
print(res6[0].string)
print(res6[0].getText())
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 20170531 这几天重新拾起了爬虫,算起来有将近5个月不碰python爬虫了。 对照着网上的程序和自己以前写的...
    八神苍月阅读 14,805评论 3 44
  • 我七八年出生的,这个缝纫机在我记事儿的时候家里就有,印象最深是小时候我们兄弟姐妹过年穿的衣服都是老妈用这个给我们做...
    Eleni阅读 1,638评论 1 2
  • 当裸露的树套上了绿装 当温柔的风偷来了花香 我深深感激着: 只乞求一丝温暖 整个春天却登场
    顾盼生段阅读 1,306评论 0 0
  • 注册与登录是一款产品绕不过的步骤,失败的登录注册流程让用户对产品望而却步。设计登录注册流程时经常会遇到这些问题,比...
    交互小小白阅读 4,466评论 7 22