Beautifulsoup4库的使用

  要点:beautifulsoup4库是一个解析和处理HTML和XML的第三方库。

1.beautifulsoup4库概述

  使用requests库获取HTML页面并将其转换成字符串后,需要进一步解析HTML页面格式,提取有用信息,这需要处理HTML和XML的函数库。

  beautifulsoup4库,也称为Beautiful Soup库或bs4库,用于解析和处理HTML和XML。需要注意的是,它不是BeautifulSoup库。它的最大优点是能根据HTML和XML语法建立解析树,进而高效解析其中的内容。

  HTML建立的Web页面一般非常复杂,除了有用的内容信息外,还包括大量用于页面格式的元素,直接解析一个Web网页需要深入了解HTML语法,而且比较复杂。beautifulsoup4库将专业的Web页面格式解析部分封装成函数,提供了若干有用且便捷的处理函数。

  在使用beautifulsoup4库之前,需要进行引用,由于这个库的名字非常特殊且采用面向对象方式组织,可以用from-import方式从库中直接引用BeautifulSoup类,方法如下:

>>>from bs4 import BeautifulSoup

2.beautifulsoup4库解析

  beautifulsoup4库中最主要的是BeautifulSoup类,每个实例化的对象相当于一个页面。采用from-import导入库中的Beautifulsoup类后,使用BeautifulSoup()创建一个BeautifulSoup对象。

>>>import requests
>>>from bs4 import BeautifulSoup
>>>r = requests.get("http://www.baidu.com")
>>>r.encoding = "utf-8"
#为了简化代码,没有考虑异常情况
>>>soup = BeautifulSoup (r.text)
#soup就是一个BeautifulSoup对象
>>>type(soup)
<class 'bs4.BeautifulSoup'>

  创建的BeautifulSoup对象是一个树形结构,它包含HTML页面中的每一个Tag(标签)元素,如head、body等。

  BeautifulSoup对象的常用属性(共6个)

属性 描述
head HTML页面的head内容
title HTML页面标题,在head之中,由title标记
body HTML页面的body内容
P HTML页面中第一个p内容
strings HTML页面所有呈现在Web上的字符串,即标签的内容
stripped_strings HTML页面所有呈现在Web上的非空格字符串
>>>soup.head
>>>title=soup.title
<title>百度一下,你就知道</title>
>>>type(title) #每个对应HTMLTag的属性是一个Tag类型
<class 'bs4.element.Tag'>
>>>soup.p

  BeautifulSoup属性与HTML的标签名称相同,每一个Tag标签beautifulsoup4库中也是一个对象,称为Tag对象。其中,尖括号(<>)中标签的名字是name,尖括号内其他项是attrs,尖括号之间的内容是string。因此,可以通过 Tag对象的name、attrs和string属性获得相应内容。
  标签对象的常用属性(共4个)

属性 描述
name 字符串,标签的名字,比如div
attrs 字典,包含了原来页面Tag所有的属性,比如href
contents 列表,这个Tag下所有子Tag的内容
string 字符串,Tag所包围的文本,网页中真实的文字
>>>soup.a # 只返回第一个
<a class="mnav"href="http://www.nuomi.com">糯米</a>
>>>soup.a.name
'a'
>>>soup.a.attrs
{'href':'http://www.nuomi.com','class':['mnav']}
>>>soup.a.string
,糯米’
>>>title.name #title变量在上段例子中已经定义
'title'
>>>title.string
,百度一下,你就知道
>>>soup.p.contents  这个Tag下所有子Tag的内容

  由于HTML语法可以在标签中嵌套其他标签,所以,string属性的返回值遵循如下原则。

  (1)如果标签内部没有其他标签,string属性返回其中的内容。

  (2)如果标签内部还有其他标签,但只有一个标签,string属性返回最里面标签的内容。

  (3)如果标签内部有超过1层嵌套的标签,string属性返回None(空字符串)。

  HTML语法中同一个标签会有很多内容。

  当需要列出标签对应的所有内容或者需要找到非第一个标签时,需要用到BeautifulSoup的find()和find_all()方法。这两个方法会遍历整个HTML文档,按照条件返回标签内容。

BeautifulSoup.find_all(name, attrs, recursive, string, limit)

  作用:根据参数找到对应标签,返回列表类型。

  参数如下:

    name:按照Tag标签名字检索,名字用字符串形式表示,例如div、li。

    attrs:按照Tag标签属性值检索,需要列出属性名称和值,采用JSON表示。

    recursive:设置查找层次,只查找当前标签下一层时使用recursive=False。

    string:按照关键字检索string属性内容,采用string=开始。

    limit:返回结果的个数,默认返回全部结果。

>>>a = soup.find all('a')   #查找所有的<a>>>> len (a)
13
>>>soup.find_all('script')
>
>>>soup.find_all('script'{'src':'http://www.zgxiangxin.com/\jquery/jquery-1.9.4.min.js'})#筛选,只查找src=字符和串的标签>>>import re    #使用正则表达式库,可以用这个库实现字符串片段匹配
>
>>>soup.find_all('script',{'src':re.compile('jquery')})
>
>>>soup.find_all(string=re.compile('百度'))

  BeautifulSoup的find_all()方法可以根据标签名字、标签属性和内容检索并返回标签列表,通过片段字符串检索时需要使用正则表达式re函数库,re是Python 标准库,直接通过 import re 即可使用。采用 re.compile(‘jquery’)实现对片段字符串(如’jquery’)的检索。当对标签属性检索时,属性和对应的值采用JSON格式,例如:

'src':re.compile('jquery')

  其中,键值对中值的部分可以是字符串或者正则表达式。

拓展:正则表达式

  正则表达式是字符串的一种逻辑表达,一般在计算机编译器中使用。Python语言采用正则表达式辅助字符串查找。正则表达式是一种规则,只要字符串符合这个规则,就算作匹配。例如,通过re.compile()函数注册一个正则表达式jquery’,则所有包含该表达式的字符串都与它匹配,除了字符串,正则表达式还可以通过*+{}目等符号扩展功能。

  除了find_all()方法,BeautifulSoup类还提供一个find()方法,官们的区别只是前者返回全部结果而后者返回找到的第一个结果,find_all())函数由于可能返回更多结果,所以采用列表形式;find()函数返回字符串形式。

BeautifulSoup.find(name,attrs,recursive,string)

  作用:根据参数找到对应标签,K用字符串返回找到的第一个值。

  参数:与find_all()方法一样。

  处理网页需要对HTML有一定的理解,而实现爬虫并不算复杂,BeautifulSoup4 库是一个非常完备且活跃的HTML解析函数库,它还可以完成更多复杂操作。

Python -- Beautifulsoup4库的使用相关推荐

  1. 【Python爬虫】BeautifulSoup4 库的一些用法

    Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree).  它提供简单又常用的导航(navigating),搜索 ...

  2. Python爬虫||BeautifulSoup4库-以小猪短租为例

    由于上次的文章被同学吐槽了,正则表达式过于麻烦,那就用BeautifulSoup库吧,比正则表达式简单太多了!只需要简单的几条语句,即可完成网页中某个元素的提取.他是python的一个HTML或者XM ...

  3. zlib 离线安装_黑板派Python扩展库安装与常见问题解决完整指南

    点击蓝字 ! 关注我们 "Python小屋"编程比赛正式开始 推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),董付国, ...

  4. 以下用于数据存储领域的python第三方库是-Python 二级选择题

    88.下面代码的输出结果是 ( A ) print(round(0.1 + 0.2,1) == 0.3) A: True B: 0 C: 1 D: False 解释: round 是一个四舍五入的函数 ...

  5. Python第三方库的安装,升级以及版本查看

    方法:通过电脑的cmd命令行来进行python第三方库的安装,升级以及版本查看 安装和升级pip 安装pip方法1 在cmd命令行输入以下命令: python -m ensurepip #当提示不存在 ...

  6. Python第三方库的安装及路径查看总结

    文章目录 1.python第三方库的四种安装方法 2.更换安装的第三方库的镜像源 3.如何查看查看python安装路径以及pip安装的包列表及路径 3.1.Linux环境下查看Python路径 3.2 ...

  7. python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...

  8. Python实训day04am【爬虫介绍、爬取网页测试、Python第三方库】

    Python实训-15天-博客汇总表 目录 1.文本文件编程题 2.爬虫(Scrapy) 2.1.安装第三方库 2.2.爬取网页测试 2.2.1.样例1 2.2.2.样例2 3.PyCharm导入第三 ...

  9. 自动安装第三方库python,python第三方库自动安装脚本

    #python第三方库自动安装脚本,需要在cmd中运行此脚本 #BatchInstall.py import os libs = {"numpy","matplotlib ...

最新文章

  1. 英国工会联盟报告:机器人技术和AI让三分之一的人失业
  2. 聊一聊社交网络的逻辑、产品和未来
  3. OpenGL 库 简介
  4. 一段良好的程序永远不应该发生panic异常
  5. 93%程序员都做过的事:来写一个python式的hello world吧
  6. 利用OpenCV实现人脸检测
  7. 蓝桥杯 ADV-207 算法提高 最长字符序列
  8. 基于图像的小麦真菌病害深度学习识别(数据+平台)
  9. Django 模板中使用 Ajax POST
  10. android adb.exe端口占用
  11. Windows server 2008 搭建×××服务
  12. 通过kmeans分析出租车数据并调用百度API进行可视化!
  13. 华为推出首款折叠屏5G手机;微信“上车”时间已定;社区团购暗潮涌动
  14. windows注册表启动项
  15. ndows movie maker,Windows Movie Maker
  16. MATLAB代码:面向削峰填谷的电动汽车多目标优化调度策略
  17. 有个大神级女朋友是什么体验
  18. 迭代学习控制方式Simulink建模与仿真
  19. scau 10306 Prison break
  20. hadoop 四种压缩格式

热门文章

  1. 左神数据结构与算法 笔记(二)
  2. 如何提高ABBYY FineReader的识别正确率
  3. 2022什么蓝牙耳机好?高品质的蓝牙耳机测评
  4. 小马同学 学习python实操的第一天
  5. oracle中Lpad与Rpad函数
  6. 紫光国芯整合大戏 为吃进长江存储或再推增发
  7. MVC之Partial View 用法
  8. AlertDialog弹出对话框
  9. iOS - OC NSDate
  10. 编程中思维方式——逆向思维案例