Infi-chu:

http://www.cnblogs.com/Infi-chu/

Beautiful Soup

借助网页的结构和属性等特性来解析网页,这样就可以省去复杂的正则表达式的编写。

Beautiful Soup是Python的一个HTML或XML的解析库。

1.解析器

解析器 使用方法 优势 劣势
Python标准库 BeautifulSoup(markup,"html.parser") 执行速度适中、文档容错能力强 2.7.3和3.2.2之前的版本容错能力差
lxml HTML解析器 BeautifulSoup(markup,"lxml") 速度快、文档容错能力强 需要安装C语言库
lxml XML解析器 BeautifulSoup(markup,"xml") 速度快,唯一支持XML的解析器 需要安装C语言库
html5lib BeautifulSoup(markup,"html5lib") 最好的容错性、以浏览器的方式解析文档、生成HTML5格式的文档 速度慢、不依赖外部扩展

综上所述,推荐lxml HTML解析器

from bs4 import BeautifulSoup
soup = BeautifulSoup('<p>Hello World</p>','lxml')
print(soup.p.string)

2.基本用法:

html = '''
<html>
<head><title>Infi-chu example</title></head>
<body>
<p class="title" name="dr"><b>title example</b></p>
<p class="story">link
<a href="http://example.com/elsie" class="sister" id="link1">elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">lacie</a>,
<a href="http://example.com/tillie" class="sister" id="link3">tillie</a>,
last sentence</p>
'''

from bs4 import BeautifulSoup
soup = BeautifulSoup(html,'lxml')
print(soup.prettify())    # 修复html
print(soup.title.string)    # 输出title节点的字符串内容

3.节点选择器:

选择元素

使用soup.元素的方式获取

提取信息

(1)获取名称

使用soup.元素.name获取元素名称

(2)获取属性

使用soup.元素.attrs

使用soup.元素.attrs['name']

(3)元素内容

使用soup.元素.string获取内容

嵌套选择

使用soup.父元素.元素.string获取内容

关联选择

(1)子节点和子孙节点

html = '''
<html>
<head><title>Infi-chu example</title></head>
<body>
<p class="title" name="dr"><b>title example</b></p>
<p class="story">link
<a href="http://example.com/elsie" class="sister" id="link1"><span>elsie</span></a>,
<a href="http://example.com/lacie" class="sister" id="link2"><span>lacie</span></a>,
<a href="http://example.com/tillie" class="sister" id="link3"><span>tillie</span></a>,
last sentence</p>
'''

from bs4 import BeautifulSoup
# 得到直接子节点,children属性
soup = BeautifulSoup(html,'lxml')
print(soup.p.children)
for i ,child in enumerate(soup.p.children):print(i,child)# 得到所有的子孙节点,descendants属性
soup = BeautifulSoup(html,'lxml')
print(soup.p.descendants)
for i,child in enmuerate(soup.p.descendants):print(i,child)

(2)父节点和祖先节点

调用父节点,使用parent属性

获取所有祖先节点,使用parents属性

(3)兄弟节点

next_sibling  下一个兄弟元素

previous_sibling  上一个兄弟元素

next_siblings  所有前面兄弟节点

previous_siblings  所有后面兄弟节点

(4)提取信息

4.方法选择器:

find_all()

find_all(name,attrs,recursize,text,**kwargs)

(1)name

soup.find_all(name='ul')
for ul in soup.find_all(name='ul'):print(ul.find_all(name='ul'))

for ul in soup.find_all(name='ul'):print(ul.find_all(name='li'))for li in ul.find_all(name='li'):print(li.string)

(2)attes

# 根据节点名查询
print(soup.find_all(attrs={'id':'list1'}))
print(soup.find_all(attrs={'name':'elements'}))# 也可以写成
print(soup.find_all(id='list1'))
print(soup.find_all(class='elements'))

(3)text

text参数可以用来匹配节点的文本,传入的形式可以是字符串,可以是正则表达式对象

from bs4 import BeautifulSoup
soup = BeautifulSoup(html,'lxml')
print(soup.find_all(text=re.compile('link')))

find()

返回一个元素

【注】

find_parents()和find_parent()

find_next_siblings()和find_next_sibling()

find_previous_siblings()和find_previous_sibling()

find_all_next()和find_next()

find_all_previous()和find_previous()

5.CSS选择器:

嵌套选择

for ul in soup.select('ul'):print(ul.select('li'))

获取属性

for ul in soup.select('ul'):print(ul['id'])# 等价于print(ul.attrs['id'])

获取文本

获取文本除了string属性还有get_text()方法

for li in soup.select('li'):# 效果一样print(li.get_text())print(li.string)

转载于:https://www.cnblogs.com/Infi-chu/p/8978363.html

Python3爬虫(六) 解析库的使用之Beautiful Soup相关推荐

  1. python爬虫解析库(Xpath、beautiful soup、Jsonpath)

    1. HTML解析 HTML的内容返回给浏览器,浏览器就会解析它,并对它渲染. HTML 超文本表示语言,设计的初衷就是为了超越普通文本,让文本表现力更强. XML 扩展标记语言,不是为了代替HTML ...

  2. 爬虫智能解析库 Readability 和 Newspaper 的用法

    舆情爬虫是网络爬虫一个比较重要的分支,舆情爬虫往往需要爬虫工程师爬取几百几千个新闻站点.比如一个新闻页面我们需要爬取其标题.正文.时间.作者等信息,如果用传统的方式来实现,每一个站点都要配置非常多的规 ...

  3. python爬虫智能解析库详解

    文章很长 请耐心阅读 什么是爬虫 爬虫是做什么的?是帮助我们来快速获取有效信息的.然而做过爬虫的人都知道,解析是个麻烦事.比如一篇新闻吧,链接是这个: https://news.ifeng.com/c ...

  4. python爬虫xpath提取数据_python爬虫三大解析库之XPath解析库通俗易懂详讲

    @(这里写自定义目录标题) 使用XPath解析库 1.简介 ??XPath(全称XML Path Languang),即XML路径语言,是一种在XML文档中查找信息的语言.适用于XML和HTML文档的 ...

  5. python中stripped string_【Python爬虫学习笔记(3)】Beautiful Soup库相关知识点总结

    1. Beautiful Soup简介 Beautiful Soup是将数据从HTML和XML文件中解析出来的一个python库,它能够提供一种符合习惯的方法去遍历搜索和修改解析树,这将大大减少爬虫程 ...

  6. 【Python爬虫学习笔记(3)】Beautiful Soup库相关知识点总结

    1. Beautiful Soup简介     Beautiful Soup是将数据从HTML和XML文件中解析出来的一个python库,它能够提供一种符合习惯的方法去遍历搜索和修改解析树,这将大大减 ...

  7. python网络爬虫学习笔记(九):Beautiful Soup的使用

    文章目录 1.基本用法 2.节点选择器 2.1 获取属性和名称 2.2 获取内容 (1)子节点和子孙节点 (2)父节点和祖先节点 (3)兄弟节点 3.方法选择器 4.CSS选择器 Beautiful ...

  8. Python爬虫之(八)数据提取-Beautiful Soup

    Beautiful Soup的简介 Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索.修改分析树等功能.它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单 ...

  9. Python3爬虫之Selenium库详解

    1.Selenium库的介绍: Selenium库是用来自动化测试的工具,支持多种浏览器,爬虫中主要用来解决JavaScript渲染的问题.给浏览器发送指令,使得浏览器做出跳转,点击,下拉等动作,模拟 ...

最新文章

  1. 2.5英寸硬盘何止“五脏俱全”(硬盘构造再揭秘之四)
  2. Android 中如何计算 App 的启动时间?
  3. 十一.激光惯导LIO-SLAM框架学习之LIO-SAM框架---框架介绍和运行演示
  4. 停止页面定时刷新_Flutter实现倒计时功能、定时任务功能
  5. spring security reactive获取security context
  6. java-数组排序--插入排序
  7. 佳能ts9020墨盒不识别_佳能打印机哪一款性价比高 佳能打印机型号推荐【详解】...
  8. 浅析数据中心交换机芯片,中国自主可控国产化交换机已是历史必然
  9. 硬件基础知识(10)---元器件选型规范大全
  10. iOS 的 APP 如何适应 iPhone 5s/6.6s/6.6sPlus 三种屏幕的尺寸?
  11. sql 2008 R2 备份和还原
  12. 无绳园林设备行业调研报告 - 市场现状分析与发展前景预测
  13. c语言实现一个密码管理器(更新中)
  14. 嵌入式系统的概念,嵌入式系统的组成及特点,嵌入式系统的基本开发流程
  15. 在Ubuntu虚拟机使用ffmpeg采集摄像头的yuv视频数据
  16. ubuntu20.04安装mysql8
  17. P2905 [USACO08OPEN]农场危机Crisis on the Farm(简单dp+麻烦“回溯”)
  18. 全国计算机二级下次报名时间,全国计算机二级考试报名时间
  19. 计算机预测自己未来的相貌,AI算法预测未来相貌,准确率高达90%以上
  20. 《水知道答案2》观后小结

热门文章

  1. Modifier ‘public‘ is redundant for interface methods错误
  2. 用python实现队列的循环左移和右移的实验原理_python的移位操作实现详解
  3. html分页器的实现原理,Django之分页器
  4. 字符界面运行mysql_详解linux系列之字符界面下MySQL+apache+php的源代码安装
  5. mysql 多物理机_MySQL 5.6同一物理主机配置多实例
  6. html页面加载动画尺寸,6种CSS3加载动画
  7. FPGA学习笔记---3种乘法器的比较
  8. MyBatis中resuleMap一对一和一对多属性字段映射
  9. Spring中控制反转IoC理论推导
  10. MongoDB两阶段提交实现事务