温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python爬虫怎么使用BeautifulSoup库

发布时间:2021-11-19 15:29:45 来源:亿速云 阅读:123 作者:iii 栏目:编程语言

本篇内容介绍了“python爬虫怎么使用BeautifulSoup库”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

  BeautiSoup类的基本元素及用bs4遍历HTML基本方法

  1,BeautifulSoup类的基本元素

  有5种基本元素:

  Tag: 标签,最基本的信息组织单元, .

  Name: 标签名字, ..name :返回一个字符串

  Attributes: 标签的属性, ..attrs :返回一个字典类型

  NavigableString:标签中的字符串, ..string :返回一个字符串

  Comment: 标签中的注释信息,会在 ..string中获得。

  比如现在有一个HTML文档:

  The demo python introduces several python courses.

  Python is a wonderful general-purpose programming language. You can learn Python from novice to professional by tracking the following courses:

  Basic Python

  and

  Advanced Python.

  This is not a Comment.

  我们对此文档用BS类的基本元素进行应用:

  先煲一锅汤:>>> soup = BeautifulSoup(html, "html.parser")

  用 .获得一个标签的全部信息:

  如:>>> soup.p

python爬虫怎么使用BeautifulSoup库

  用.name获得这个标签的名字:

  如:>>> p.name

python爬虫怎么使用BeautifulSoup库

  Tag属性还有另外一个重要的用法, 就是当我们对一个标签内的子节点进行遍历时,可能会有不是标签的节点,比如’\n’等,此时可利用bs4库提供的bs4.element.Tag属性来进行甄别。

  用到 isinstance()方法。比如:isinstance(soup.a, bs4.element.Tag)

python爬虫怎么使用BeautifulSoup库

  用.attrs获得这个标签的属性:

  如>>> soup.a.attrs

python爬虫怎么使用BeautifulSoup库

  可以对a标签的具体属性进行获得:>>> soup.a['href']

python爬虫怎么使用BeautifulSoup库

  用.string获得这个标签中的字符串信息:

  如:>>> soup.p.string:

python爬虫怎么使用BeautifulSoup库

  我们看到.string可以跨越标签,直接获得标签内的字符串。

  但是: 当外层标签内含有多个平行的内层标签时,就不行了:

  比如:郑州人流医院哪家好 http://m.zzzy120.com/

  此p标签内有多个平行的a标签,直接用p.string返回为None

  最后,说说Comment属性

  可用>>> soup.b.string来获得注释的信息:

  二者类型是不同的,因此可用bs4库的 isinstance(, bs4.element.Comment)来过滤注释信息,或者获得注释信息。

  2,用BeautifulSoup遍历HTML的方式

  1,下行遍历:

  3个属性:

  1,.contents : 子节点的列表,将所有儿子节点存入列表(还包括所有的\n)

  2,.children : 子节点的迭代类型,与.contents类似,用于循环遍历儿子节点。

  3, .descendants : 包含所有的子孙节点。与children一样,只能用于迭代。

  2,上行遍历:

  2个属性:

  1,.parent : 节点的父亲标签

  2,.parents: 节点先辈的迭代类型,用于循环遍历先辈节点(所有的先辈)。

  3,平行遍历:

  4个平行遍历属性:(需要发生在同一个父亲节点下的各节点间。)

  1,.next_sibling : 返回按照HTML文本顺序的下一个平行节点标签。

  2,.previous_sibling: 返回。。的上一个平行节点标签。

  3,.next_siblings: 迭代类型, 返回按照顺序的所有平行节点标签。

  4,.previous_sibings:迭代类型 。。。。。。。。。

  3,BeautifulSoup的格式化输出与编码:

  prettify()函数:能够为HTML标签,文本增加换行符,

  1,世界上的所有信息都可以用3中标记形式进行标记。

  XML 格式: 类似于HTML,标签形式。

  JSON: 有类型的键值对 key:value 如:

  "name" : "北京" -----;一个键值对

  "name" : ["hello", "hello"] -----: 一个键对应多个值1

  "name" : {"subkey" : "subvalue"} -----:一个键值对作为一个值对应于一个键

  YAML: 无类型的键值对 : key : value

  name : 北京

  name :

  -newName : 北京

  -newName : 上海 (并列)

  name :

  newname : hello (嵌套)

  比较::

  XML用<>标记 : 扩展性好,但是繁琐。 Internet上的信息交互与传递,多用XML。

  JSON用“” : 信息有类型,适合程序处理(js),较XML整洁。(无法注释) 用于移动应用云端和节点的信息通信。用在对程序接口处处理。

  YAML用缩进 : 信息无类型, 文本信息比例最高,可读性好。各类系统的配置文件,有注释易读。

  2,信息的提取方式

  1,完整解析信息的标记形式,再提取关键信息。

  2,无视标记形式,直接搜索关键信息。

  3,融合方法。

  如:提取HTML中所有的URL标签。

  思路):

  1,搜索所有的标签

  2,解析标签格式,提取href后的链接内容。

  3,find_all()方法

  最常用的查找方法

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

  返回一个列表类型,存储查找的结果.

  使用方法:

  可单独指定name,attrs, recursive, string等

  标签名, 属性(或字典形式的键值对), 默认为对子孙节点搜索, 字符串。

  (..) 等价于 .find_all(..)

  soup(..) 等价于 soup.find_all(..)

  <>.find()搜索只返回一个结果,字符串结果。

“python爬虫怎么使用BeautifulSoup库”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI