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 alt="" 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 alt="" 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="百度一下"/>]

[爬虫] BeautifulSoup库的更多相关文章

  1. Python爬虫-- BeautifulSoup库

    BeautifulSoup库 beautifulsoup就是一个非常强大的工具,爬虫利器.一个灵活又方便的网页解析库,处理高效,支持多种解析器.利用它就不用编写正则表达式也能方便的实现网页信息的抓取 ...

  2. 网络爬虫BeautifulSoup库的使用

    使用BeautifulSoup库提取HTML页面信息 #!/usr/bin/python3 import requests from bs4 import BeautifulSoup url='htt ...

  3. python爬虫BeautifulSoup库class_

    因为class是python的关键字,所以在写过滤的时候,应该是这样写: r = requests.get(web_url, headers=headers) # 向目标url地址发送get请求,返回 ...

  4. Python爬虫小白入门(三)BeautifulSoup库

    # 一.前言 *** 上一篇演示了如何使用requests模块向网站发送http请求,获取到网页的HTML数据.这篇来演示如何使用BeautifulSoup模块来从HTML文本中提取我们想要的数据. ...

  5. python爬虫学习之使用BeautifulSoup库爬取开奖网站信息-模块化

    实例需求:运用python语言爬取http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html这个开奖网站所有的信息,并且保存为txt文件和excel文件. 实 ...

  6. python爬虫学习(一):BeautifulSoup库基础及一般元素提取方法

    最近在看爬虫相关的东西,一方面是兴趣,另一方面也是借学习爬虫练习python的使用,推荐一个很好的入门教程:中国大学MOOC的<python网络爬虫与信息提取>,是由北京理工的副教授嵩天老 ...

  7. Python爬虫利器:BeautifulSoup库

    Beautiful Soup parses anything you give it, and does the tree traversal stuff for you. BeautifulSoup ...

  8. $python爬虫系列(2)—— requests和BeautifulSoup库的基本用法

    本文主要介绍python爬虫的两大利器:requests和BeautifulSoup库的基本用法. 1. 安装requests和BeautifulSoup库 可以通过3种方式安装: easy_inst ...

  9. python爬虫入门四:BeautifulSoup库(转)

    正则表达式可以从html代码中提取我们想要的数据信息,它比较繁琐复杂,编写的时候效率不高,但我们又最好是能够学会使用正则表达式. 我在网络上发现了一篇关于写得很好的教程,如果需要使用正则表达式的话,参 ...

随机推荐

  1. java+大文件断点续传

    用JAVA实现大文件上传及显示进度信息 ---解析HTTP MultiPart协议 (本文提供全部源码下载,请访问 https://github.com/1269085759/up6-jsp-mysq ...

  2. java+Word图片上传控件

    这种方法是servlet,编写好在web.xml里配置servlet-class和servlet-mapping即可使用 后台(服务端)java服务代码:(上传至ROOT/lqxcPics文件夹下) ...

  3. (编程语言+python+变量名+垃圾回收机制)*知识点

    编程语言 从低级到高级的发展的过程 1.机器语言 计算机是基于电工作的.(基于高.低电平 1010010101011) 如果用机器语言表现一个字符的意思需要多段代码的行.但是计算机读取的快. 所以机器 ...

  4. Java当中的基本类型包装类

    Java当中的基本类型包装类 01 基本数据类型对象的包装类 **什么是基本数据类型对象包装类呢?**就是把基本数据类型封装成对象,这样就可以提供更多的操作基本数值的功能了. 基本数据类型对象的包装类 ...

  5. CTF MD5之守株待兔,你需要找到和系统锁匹配的钥匙

    这是提示 从系统锁下手,通过get方式key字段提交答案,直到您的钥匙与系统锁相等则成功. 点开链接可以发现有两串字符,而且系统的秘钥是一直在变化的 题目中已经给了MD5加密,那么用MD5解密发现您的 ...

  6. ettercap局域网DNS切换到恶意网址

    ettercap -i eth0 -Tq -M arp:remote -P dns_spoof /// /// Dns欺骗--Ettercap工具进行Dns欺骗 转载至 https://blog.cs ...

  7. SNOI2017炸弹

    这个东西其实我是不太会的……但是勉强卡过去了. 首先肯定是建有向图,然后求每个节点能访问的节点个数,最裸的打法就是按照题意枚举建边然后tarjan缩点,用bitset记录一下访问节点,但是bitset ...

  8. Idea关于Lombok的一些问题( java: 找不到符号 符号)

    22:15 Lombok Requires Annotation Processing Annotation processing seems to be disabled for the proje ...

  9. HttpClient : java.net.SocketException: Connection reset

    1. 问题排查 httpclient : 4.5.5 排查过程 : 一次SocketException:Connection reset 异常排查 主要原因 : 调用 http 请求时发生了 Sock ...

  10. LeetCode 21. 合并两个有序链表(Merge Two Sorted Lists)

    题目描述 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1-& ...