Python 爬虫-BeautifulSoup
发布日期:2022-04-02 18:15:33 浏览次数:9 分类:博客文章

本文共 1456 字,大约阅读时间需要 4 分钟。

2017-07-26 10:10:11

Beautiful Soup可以解析html 和 xml 格式的文件。

Beautiful Soup库是解析、遍历、维护“标签树”的功能库。使用BeautifulSoup库非常简单,只需要两行代码,就可以完成BeautifulSoup类的创建,这里命名为soup,接下来就可以对soup进行相关处理了。一个BeautifulSoup类对应html或者xml的全部内容。

BeautifulSoup库将任意html文件转换成utf-8格式

 

一、解析器

BeautifulSoup类创建的时候第二个参数是解析器,上面的代码中用的解析器为‘html.parser’,BeautifulSoup支持的解析器有:

 

二、BeautifulSoup类的基本元素

 

  • 使用soup.tag来访问一个标签的内容,如:soup.title;soup.a等,这里的返回值为访问标签的第一个出现的值
  • 使用soup.tag.name可以得到当前标签的名字,返回值为字符串,如:soup.a.name 会返回字符串 ‘a’,也可以使用soup.a.parent.name来查看 a 标签父母的名字
  • 使用soup.tag.attrs可以得到当前标签的属性,返回值为一个字典,如果没有属性会返回一个空字典,如:soup.a.attrs 会返回 a 标签的属性信息
  • 使用soup.tag.string可以得到当前标签的字符串,如:soup.a.string 会返回 a 标签的内容字符串
  • 内容字符串有两种类型一是NavigableString类型,一种是Comment类型,Comment类型的格式是<p> <!-- This is an comment --></p>,在调用soup.p.string是会返回This is an comment,但是其类型是Comment类型。

 

三、soup的内容遍历

标签树的遍历有三种方式,即下行遍历,上行遍历和平行遍历。

 

(1)下行遍历属性

 

举例:

#遍历儿子节点for child in soup.body.children:    print(child)#遍历子孙节点for child in soup.body.descendants:print(child)

 

值得注意的是子孙节点不仅包含标签,还包含标签之间的字符串类型,这点需要注意与排除。

 

(2)上行遍历的属性

soup.parent为空,需要进行区分,可以使用for循环对parents进行遍历:

(3)平行遍历的属性

 

#遍历后续节点for sibling in soup.a.next_sibling:    print(sibling)#遍历前续节点for sibling in soup.a.previous_sibling:    print(sibling)

 

四、信息提取

  • name :  对标签名称的检索字符串,返回标签name的所有内容,并生成列表,也以使用列表一次查找多个标签;如果标签名称为TRUE,将返回所有的标签信息;也可以使用正则对返回的标签信息做筛选

 

  •   attrs: 对标签属性值的检索字符串,可标注属性检索,返回列表,属性值必须精确,如果不提供精确的值得话,会返回空列表,可以使用正则表达式进行非精确的匹配

  •  recursive: 是否对子孙全部检索,默认True

 

  •  string: <>…</>中字符串区域的检索字符串,需要加上string=‘’进行检索

简写方式:

扩展方法:

 

转载地址:https://www.cnblogs.com/hyserendipity/p/7239105.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Python 爬虫-图片的爬取
下一篇:Python 爬虫-信息的标记xml,json,yaml

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年03月23日 09时24分57秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

python调用oracle过程 权限不足_oracle-存储过程提示 ORA-01031: 权限不足 2019-04-21
java ee6教程_Java EE 极简教程(六):框架的选择 2019-04-21
java io流过滤流_IO流分类详细介绍和各种字节流类介绍与使用 过滤流 字节流 2019-04-21
java预处理指令_Java程序员学C++_1_C++中的预处理命令 | 学步园 2019-04-21
java分词支持拼音_java 支持分词的高性能拼音转换工具,速度是 pinyin4j 的两倍... 2019-04-21
java中的%不对 如何处理_Java心得--异常及其处理 2019-04-21
java 上传速度计算_java常见3种文件上传速度对比和文件上传方法详细代码 2019-04-21
java 中区分月份_输入一年当中的月份,判断是哪个季节.(用java编写并且用到了import java.io.*;)... 2019-04-21
java 试图模版_图解Java设计模式之模板模式 2019-04-21
java.exe占用cpu_Windows服务器java.exe占用CPU过高问题分析及解决 2019-04-21
支付宝 java 乱码_支付宝即时到账接口中文乱码问题 2019-04-21
java中的handler理解_handler 与message的一些理解 2019-04-21
JAVA礼物题_这些Java面试题,你一定要记住! 2019-04-21
java 隐藏email_java Email 2019-04-21
linux下qt浏览word文件内容,Qt获取office文件内容 2019-04-21
amd锐龙笔记本cpu怎么样_不知不觉已经15款 AMD Ryzen锐龙笔记本处理器盘点 2019-04-21
syslog打印不带等级_(转)syslog日志等级 2019-04-21
librosa能量_librosa语音信号处理 2019-04-21
android日期选择区间控件_Android时间区间的选择 2019-04-21
lin通讯从节点同步间隔场_LIN模块介绍 2019-04-21