python爬虫之解析库Beautiful Soup

Beautiful Soup4操作

为何要用Beautiful Soup

  Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式,

  是一个标签的形式,来进行查找的,有点像jquery的形式。提升效率,我们在进行爬虫开发的时候,进程会用到正则来进行查找过滤的操作,纯手动会及其浪费时间。

Beautiful Soup示例摘自官网

html_doc = """
<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>
"""

这里先简单说明Beautiful Soup的查找方式,是一个标签树的形式。

在使用的时候实例化一个对象,这个对象就相当于整个html文件,将标签封装成对象的属性,查找的时候使用“.”

下面进行操作:

  简单操作

from bs4 import BeautifulSoup
soup = BeautifulSoup(open("html_doc.html"),"lxml")
#简单的操作
#打印html文件的title属性
#print(soup.title)
#<title>The Dormouse‘s story</title>

#打印标签的名字
# print(soup.title.name)
#title

# 打印标签的内容
# print(soup.title.string)
#The Dormouse‘s story

#打印soup中的p标签,但是这里是能找到的第一个
# print(soup.p)
# <p class="title"><b>The Dormouse‘s story</b></p>

#打印soup中的p标签class名字,但是这里是能找到的第一个
# print(soup.p[‘class‘],type(soup.p[‘class‘]))
# [‘title‘] <class ‘list‘> #类型是个列表

# 打印soup中的a标签,但是这里是能找到的第一个
# print(soup.a)
# <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>

#打印所有的a标签
# print(soup.find_all(‘a‘))
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
# <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
# <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]

#打印id=link3的标签
# print(soup.find(id="link3"))
# <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>

#从文档中找到所有<a>标签的链接:
# for link in soup.find_all(‘a‘):
#     print(link.get(‘href‘))
    # http://example.com/elsie
    # http://example.com/lacie
    # http://example.com/tillie

# 从文档中获取所有文字内容:
# print(soup.get_text())
# The Dormouse‘s story
#
# The Dormouse‘s story
#
# Once upon a time there were three little sisters; and their names were
# Elsie,
# Lacie and
# Tillie;
# and they lived at the bottom of a well.
#
# ...

Tag

soup1 = BeautifulSoup(‘<b class="boldest">Extremely bold</b>‘,"lxml")
tag = soup1.b
# print(type(tag))
# <class ‘bs4.element.Tag‘>

Tag的Name属性

# print(tag.name)
# b
# 如果改变了tag的name,那将影响所有通过当前Beautiful Soup对象生成的HTML文档:

# tag.name = "blockquote"
# print(tag)
# <blockquote class="boldest">Extremely bold</blockquote>

Tag的Attributes属性

一个tag可能有很多个属性. tag <b class="boldest"> 有一个 “class” 的属性,值为 “boldest” . tag的属性的操作方法与字典相同:
# print(tag[‘class‘])
# [‘boldest‘]

# 也可以直接”点”取属性, 比如: .attrs :
# print(tag.attrs)
# {‘class‘: [‘boldest‘]}
# print(soup.a.attrs[‘class‘])
# [‘sister‘]
# tag的属性可以被添加,删除或修改. 再说一次, tag的属性操作方法与字典一样

# tag[‘class‘] = ‘verybold‘# tag[‘id‘] = 1# print(tag)# <blockquote class="verybold" id="1">Extremely bold</blockquote>

# del tag[‘class‘]# del tag[‘id‘]# print(tag)# <blockquote>Extremely bold</blockquote>

# tag[‘class‘]# KeyError: ‘class‘# print(tag.get(‘class‘))# None
 

子节点操作:

  .contents属性

#.contents
# tag的 .contents 属性可以将tag的子节点以列表的方式输出:
# print(soup)
#print(soup.contents) #这里打印的是整个html标签
#print("________")
#print(soup.head.contents) #打印出来的是head下的列表,可以借助元组去重
##[‘\n‘, <meta charset="utf-8"/>, ‘\n‘, <title>The Dormouse‘s story</title>, ‘\n‘]
#print(len(soup.head.contents))
##5
#print(soup.head.contents[1].name)
##meta

解释器:

  

解析器 使用方法 优势 劣势
Python标准库 BeautifulSoup(markup, "html.parser")
  • Python的内置标准库
  • 执行速度适中
  • 文档容错能力强
  • Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差
lxml HTML 解析器 BeautifulSoup(markup, "lxml")
  • 速度快
  • 文档容错能力强
  • 需要安装C语言库
lxml XML 解析器
BeautifulSoup(markup, ["lxml-xml"])

BeautifulSoup(markup, "xml")

  • 速度快
  • 唯一支持XML的解析器
  • 需要安装C语言库
html5lib BeautifulSoup(markup, "html5lib")
  • 最好的容错性
  • 以浏览器的方式解析文档
  • 生成HTML5格式的文档
  • 速度慢
  • 不依赖外部扩展

  

  

原文地址:https://www.cnblogs.com/taozizainali/p/9295117.html

时间: 2024-07-31 13:43:34

python爬虫之解析库Beautiful Soup的相关文章

Python爬虫利器二之Beautiful Soup的用法

上一节我们介绍了正则表达式,它的内容其实还是蛮多的,如果一个正则匹配稍有差池,那可能程序就处在永久的循环之中,而且有的小伙伴们也对写正则表达式的写法用得不熟练,没关系,我们还有一个更强大的工具,叫Beautiful Soup,有了它我们可以很方便地提取出HTML或XML标签中的内容,实在是方便,这一节就让我们一起来感受一下Beautiful Soup的强大吧. 1. Beautiful Soup的简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官

[Python]HTML/XML解析器Beautiful Soup

[简介] Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库.即HTML/XMLX的解析器. 它可以很好的处理不规范标记并生成剖析树(parse tree). 它提供简单又常用的导航(navigating),搜索以及修改剖析树的操作.它可以大大节省你的编程时间. [安装] 下载地址:点击打开链接 Linux平台安装: 如果你用的是新版的Debain或ubuntu,那么可以通过系统的软件包管理来安装: $ apt-get install Python-bs4 B

Python爬虫【解析库之beautifulsoup】

解析库的安装 pip3 install beautifulsoup4 初始化 BeautifulSoup(str,"解析库") from bs4 import BeautifulSoup html='''<div class="panel"> <div class="panel-heading"> <h4>Hello</h4> </div> <div class="pan

Python的html和xml解析库Beautiful Soup

网站:http://www.crummy.com/software/BeautifulSoup/ 版权声明:本文博主原创文章,博客,未经同意不得转载.

python爬虫之解析库正则表达式

上次说到了requests库的获取,然而这只是开始,你获取了网页的源代码,但是这并不是我们的目的,我们的目的是解析链接里面的信息,比如各种属性  @href  @class span  抑或是p节点里面的文本内容,但是我们需要一种工具来帮我们寻找出这些节点,总不能让我们自己一个一个复制粘贴来完成吧,那样的话,还要程序员干嘛>>计算机是为了方便人们才被发明出来的. 这次我们使用一个非常好用的工具>>正则表达式,可能有的大佬已经听说过了,哦,就是那么一个东西,并说,不是用css选择器或

Python爬虫的Urllib库有哪些高级用法?

本文和大家分享的主要是python爬虫的Urllib库的高级用法相关内容,一起来看看吧,希望对大家学习python有所帮助. 1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解释才呈现出来的,实质它 是一段HTML代码,加 JS.CSS,如果把网页比作一个人,那么HTML便是他的骨架,JS便是他的肌肉,CSS便是它的衣服.所以最重要的部分是存在于HTML中的,下面我 们就写个例子来扒一个网页下来. imp

Python爬虫之Urllib库的基本使用

Python爬虫之Urllib库的基本使用 import urllib2 response = urllib2.urlopen("http://www.baidu.com") print response.read() 其实上面的urlopen参数可以传入一个request请求,它其实就是一个Request类的实例,构造时需要传入Url,Data等等的内容.比如上面的两行代码,我们可以这么改写 # -*- coding: utf-8 -*- """ Cre

python标准库Beautiful Soup与MongoDb爬喜马拉雅电台的总结

Beautiful Soup标准库是一个可以从HTML/XML文件中提取数据的Python库,它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式,Beautiful Soup将会节省数小时的工作时间.pymongo标准库是MongoDb NoSql数据库与python语言之间的桥梁,通过pymongo将数据保存到MongoDb中.结合使用这两者来爬去喜马拉雅电台的数据... Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,其中一个是

爬虫学习——网页解析器Beautiful Soup

一.Beautiful Soup的安装与测试 官方网站:https://www.crummy.com/software/BeautifulSoup/ Beautiful Soup安装与使用文档:  https://www.crummy.com/software/BeautifulSoup/bs4/doc/ 1.首先测试一下bs4模块是否已经存在,若不存在再安装即可,我用的是kali测试发现bs4模块已经存在,下面介绍如何测试与安装 新建python文档输入以下代码 1 import bs4 2