python爬虫怎么使用BeautifulSoup库
本篇内容介绍了“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
用.name获得这个标签的名字:
如:>>> p.name
Tag属性还有另外一个重要的用法, 就是当我们对一个标签内的子节点进行遍历时,可能会有不是标签的节点,比如’\n’等,此时可利用bs4库提供的bs4.element.Tag属性来进行甄别。
用到 isinstance()方法。比如:isinstance(soup.a, bs4.element.Tag)
用.attrs获得这个标签的属性:
如>>> soup.a.attrs
可以对a标签的具体属性进行获得:>>> soup.a['href']
用.string获得这个标签中的字符串信息:
如:>>> soup.p.string:
我们看到.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库”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341