[爬虫] BeautifulSoup库

Beautiful Soup库基础知识

Beautiful Soup库是解析xml和html的功能库。html、xml大都是一对一对的标签构成,所以Beautiful Soup库是解析、遍历、维护“标签树”的功能库,只要提供的是标签类型Beautiful Soup库都可以进行很好的解析。

Beauti Soup库的导入

from bs4 import BeautifulSoup

import bs4

html文档 == 标签树 == BeautifulSoup类   可以认为三者是等价的

>>>from bs4 import BeautifulSoup
>>>soup = BeautifulSoup(‘<html>data</html>‘,‘html.parser‘)
>>>soup1=BeautifulSoup(open(r‘D:\demo.html‘),‘html.parser‘)

简单来说一个BeautifulSoup类对应一个html文档的全部内容。如上面的soup、soup1都对应一个html文档。

Beautiful Soup类的基本元素

  • Tag 标签            最基本的信息组织单元,分别用<></>开头结尾,通过soup.<标签>获得
  • Name                标签名字,通过<标签>.name获取到
  • Attribute            标签的属性,字典形式,通过<标签>.attrs获取
  • Navigablestring 标签对之间的字符串,通过<标签>.string获取
  • Comment          标签内字符串的注释部分,一种特殊的Comment类型

soup.标签名  可获得该标签信息,当存在多个一样的标签时,默认返回第一个标签的信息。

>>> soup=BeautifulSoup(demo,‘html.parser‘)
>>> soup.title
<title>四大美女</title>
>>> soup.a
<a href="http://www.baidu.com" target="_blank"><img  heigth="200" src="picture/1.png" title="貂蝉" width="150"/></a>  

soup.标签.name  可获取标签的名字,以字符串形式返回

>>> soup.a.name        #获取a标签的名字
‘a‘
>>> soup.a.parent.name #获取a标签的上级标签名字
‘p‘
>>> soup.a.parent.parent.name #获取a标签的上上级标签的名字
‘hr‘

soup.标签.attrs  可获得标签的属性,以字典形式返回

>>> soup.a.attrs      #获取a标签的属性,字典返回
{‘href‘: ‘http://www.baidu.com‘, ‘target‘: ‘_blank‘}
>>> tag = soup.a.parent
>>> tag.name         #获取p标签的属性,字典返回
‘p‘
>>> tag.attrs
{‘align‘: ‘center‘}  

因为返回的是字典可以采用字典的方法对其进行信息的提取。

>>> for i,j in soup.a.attrs.items(): #for循环遍历字典
    print(i,j)
href http://www.baidu.com
target _blank
>>> soup.a.attrs[‘href‘]             #获取某个key的value值
‘http://www.baidu.com‘
>>> soup.a.attrs.keys()              #获取字典所有的keys
dict_keys([‘href‘, ‘target‘])
>>> soup.a.attrs.values()            #获取字典所有values
dict_values([‘http://www.baidu.com‘, ‘_blank‘])

soup.标签.string  可以获取标签之间的文本,返回字符串

>>> soup.title.string   #获取title表之间的文本
‘四大美女‘
>>> soup.a.string       #获取a标签之间的文本,没有返回空
>>> soup.a
<a href="http://www.baidu.com" target="_blank"><img  heigth="200" src="picture/1.png" title="貂蝉" width="150"/></a>

基于bs4库的HTML的遍历方法

HTML基本格式

标签树的下行遍历

属性及说明

  • .contents      子节点的列表,将<tag>标签所有儿子节点存入列表
  • .children       子节点的迭代类型,与.content类似,用于循环遍历儿子节点
  • .descendants  子孙节点的迭代类型,包含所有子孙节点,用于循环遍历
>>> soup.head
<head>
<meta charset="utf-8">
<title>四大美女</title>
</meta></head>
>>> soup.head.contents                #获取head标签下的儿子节点
[‘\n‘, <meta charset="utf-8">
<title>四大美女</title>
</meta>]
>>> len(soup.body.contents)          #通过len函数获取body标签的儿子节点个数
3
>>> for i in soup.body.children:     #遍历body标签的儿子节点
    print(i)
>>> for i in soup.body.descendants:  #遍历body标签所有的儿子、子孙节点
    print(i)

标签树的上行遍历

  • .parent      当前节点的父亲标签
  • .parents    节点先辈标签的迭代类型,用于循环遍历先辈节点。

标签树的平行遍历

  • .next_sibling            返回按照html文本顺序的下一个平行节点标签
  • .previous_sibling     返回按照html文本顺序的上一个平行节点标签
  • .next_siblings          迭代类型,返回按照html文本顺序的后续所有平行节点标签
  • .previous_siblings   迭代类型,返回按照html文本顺序的前续所有平行节点标签

总结如下图:

bs4库的prettify()方法--让HTML内容更加“友好”的显示

信息提取

Beautiful Soup库提供了<>.find_all()函数,返回一个列表类型,存储查找的结果。

详细介绍如下:

  <>.find_all(name, attrs, recursive, string,**kwargs)

  <tag>(...) == <tag>.find_all(...)

  soup(...) == soup.find_all(...)

  • name :  对标签名称的检索字符串
  • attrs:    对标签属性值的检索字符串,可标注属性检索
  • recursive :  是否对子孙全部检索,默认 True
  • string :        <>...</>中字符串区域的检索字符串
>>> soup.find_all(‘p‘,target=‘_blank‘)     #查找p标签,而且属性值是_blank的
[]
>>> soup.find_all(id=‘su‘)          #查找id属性值是su的标签
[<input class="bg s_btn" id="su" type="submit" value="百度一下"/>]
时间: 2024-08-02 15:23:42

[爬虫] BeautifulSoup库的相关文章

网络爬虫BeautifulSoup库的使用

使用BeautifulSoup库提取HTML页面信息 #!/usr/bin/python3 import requests from bs4 import BeautifulSoup url='http://python123.io/ws/demo.html' r=requests.get(url) if r.status_code==200: print('网络请求成功') demo=r.text soup=BeautifulSoup(demo,'html.parser') print(sou

四 . 爬虫 BeautifulSoup库参数和使用

一  .BeautifulSoup库使用和参数 1 .Beautiful简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索.修改分析树等功能.它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序.Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码.你

Python爬虫利器:BeautifulSoup库

Beautiful Soup parses anything you give it, and does the tree traversal stuff for you. BeautifulSoup库是解析.遍历.维护 "标签树" 的功能库(遍历,是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问).https://www.crummy.com/software/BeautifulSoup BeautifulSoup库我们常称之为bs4,导入该库为:from bs4 im

[python爬虫] BeautifulSoup和Selenium对比爬取豆瓣Top250电影信息

这篇文章主要对比BeautifulSoup和Selenium爬取豆瓣Top250电影信息,两种方法从本质上都是一样的,都是通过分析网页的DOM树结构进行元素定位,再定向爬取具体的电影信息,通过代码的对比,你可以进一步加深Python爬虫的印象.同时,文章给出了我以前关于爬虫的基础知识介绍,方便新手进行学习.        总之,希望文章对你有所帮助,如果存在不错或者错误的地方,还请海涵~ 一. DOM树结构分析 豆瓣Top250电影网址:https://movie.douban.com/top2

Python 爬虫-BeautifulSoup

2017-07-26 10:10:11 Beautiful Soup可以解析html 和 xml 格式的文件. Beautiful Soup库是解析.遍历.维护"标签树"的功能库.使用BeautifulSoup库非常简单,只需要两行代码,就可以完成BeautifulSoup类的创建,这里命名为soup,接下来就可以对soup进行相关处理了.一个BeautifulSoup类对应html或者xml的全部内容. BeautifulSoup库将任意html文件转换成utf-8格式 一.解析器

BeautifulSoup 库

https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/#id4 中文版BeautifulSoup库 作用 提取HTML和XML文档中的数据 修改.导航.查找文档 创建html_doc >>> html_doc = """... <html><head><title>The Dormouse's story</title></head>  .

解决BeautifulSoup库运行时报错问题

解决BeautifulSoup库运行时报错问题 运行BeautifulSoup库时可能出现下面的错误,具体错误消息为:To get rid of this warning, change this: BeautifulSoup([your markup]) to this: BeautifulSoup([your markup], "html.parser") 2.修改方法: 根据提示,将初始化,soup=BeautifulSoup(doc)修改为soup=BeautifulSoup(

python下载安装BeautifulSoup库

python下载安装BeautifulSoup库 1.下载https://www.crummy.com/software/BeautifulSoup/bs4/download/4.5/ 2.解压到解压到python目录下: 3.“win+R”进入cmd:依次输入如下代码: C:\Users\Administrator>cd D:\softwareIT\Python27\beautifulsoup4-4.5.0 C:\Users\Administrator>d: D:\softwareIT\Py

BeautifulSoup库的安装与使用

BeautifulSoup库的安装 Win平台:"以管理员身份运行" cmd 执行 pip install beautifulsoup4 演示HTML页面地址:http://python123.io/ws//demo.html 文件名称:demo.html 网页源代码:HTML 5.0 格式代码 BeautifulSoup库的安装小测: >>> import requests >>> r = requests.get("http://pyt