Python爬虫学习笔记之BeautifulSoup入门

标签: python

BeautifulSoup库学习总结:

简介:

BeautifulSoup是用来解析html/xml的工具,我们在爬虫保存下我们需要的html文档后需要用它来进行文档的解析与信息提取工作。

安装:

在管理员权限下打开cmd,输入pip install BeautifulSoup4

导入:

from bs4 import BeautifulSoup

创建BeautifulSoup对象:

Soup = BeautifulSoup(“要解析的页面”,”解析器”)

Demosoup = BeautifulSoup(r.text,”html.parser”  

输出:

print(soup.prettify())

BeautifulSoup库解析器: 

解析器

使用方法

条件

bs4html解析器

BeautifulSoup(mk,’htmlparser’)

安装bs4

lxmlhtml解析器

BeautifulSoup(mk,’lxml’)

安装lxml

lxmlxml解析器

BeautifulSoup(mk,’xml’)

安装lxml

Html5lib的解析器

BeautifulSoup(mk,’html5lib’)

安装html5lib


BeautifulSoup类基本元素:

基本元素

说明

Tag

标签,最基本的信息组织单元,用<></>来标记开头或结尾

Name

标签的名字,例如<p></p>的名字是’p’

Attributes

标签中的属性,字典形式组织,格式Tag.attrs

NavigableString

标签队内非属性字符串,<>...</>标签对中的信息,格式Tag.string

Comment

标签内字符串的注释部分,一种特殊的Comment类型


注意:在使用
NavigableString的时候,并不能区分字符串和注释。假如遇到标签对中是注释,则会去掉尖括号<-- --/>

遍历HTML节点的方式:

·下行遍历:从当前结点向子节点遍历

·上行遍历:从当前结点向父节点遍历

·平行遍历:遍历同一个父节点下的子节点(必须是同一个父节点) 

标签树的下行遍历:

属性

说明

返回类型

.contents

子节点的列表,将所有儿子节点存入列表

列表

.children

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

迭代

.descendants

子孙节点的迭代类型,包含所有子孙节点,用于循环遍历

迭代

for child in soup.body.childern:

    print(child)

for child in soup.body.descendants:

    print(child)

标签树的上行遍历:

属性

说明

.parent

获得当前结点的父亲标签

.parents

节点先辈标签的迭代类型,用于循环遍历仙贝节点


·这里要注意,我们在遍历所有先辈节点的时候最终会遍历到<html>标签的先辈节点,这时是没有节点名称的,我们要对此进行处理。

for parent in soup.a.parents

    if parent is None:

        print(parent)

    else:

        print(parents.name)


 

标签树的平行遍历:

属性

说明

.next_sibling

返回按照html文本顺序的下一个平行节点标签

.previous_sibling

返回按照html文本顺序的上一个平行节点标签

.next_siblings

返回按照html文本顺序的后续所有平行节点标签,返回类型是迭代类型

.previous_siblings

返回按照html文本顺序的前序所有平行节点标签,返回类型是迭代类型

 

标签树的遍历小结:

 标签树的下行遍历使用到了.contents .children .descendants三个属性。

 需要注意的是.contents返回的是一个列表类型,后面两个方法都返回的是一个迭代类型,必须使用迭代器才能访问里面的 信息。

 

 在做上行遍历时,我们可以用.parent. parents两个属性。

 

 在做平行遍历时我们用了 .next_sibling .previous_sibling .next_siblings .previous_siblings四个属性。

 需要注意的是.next_siblings .previous_siblings 返回的都是迭代类型。

 

关于BeautifulSoupprettify方法:

为了使html文档更加易于人或程序来阅读,BeautifulSoup类提供了prettify方法。


我们可以看到,prettify方法把文档的每一个标签或标签信息后都加了\n(换行符)


接下来我们用print函数打印一下看看

 

我们可以发现,使用了prettify方法处理之后的html文档阅读起来更加的清晰

 

Prettify方法不仅可以作用于html文档,还可以在标签中使用,以获得更好的html阅读效果。

 

BeautifulSoup库中的编码问题:

Python3.X版本中,BeautifulSoup自动将读入进来的HTML文件或字符串都转化为了UTF-8编码。这种编码可以很好的支持中文等第三方语言。而python2.x版本中却不行。所以建议学习者使用python3.x版本进行学习开发。

基于bs4库的HTML文档信息查找方法: 

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

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

name:对标签名称的检索字符串

soup.find_all('标签类型')

attrs:对标签中属性值的检索字符串

soup.find_all('p','course')

soup.find_all(id='link1')

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

soup.find_all('p',recursive = False)

string:对根节点开始,全部字符串进行查找

soup.find_all(string = '')

我们还可以结合正则表达式,对字符串进行查找

soup.find_all(string = re.compile(''))

由于find_all()函数十分常用,所以在python中用<>()可以代替<>.find_all()

扩展方法:

      方法                    说明                    
<>.find()搜索返回查找到的第一个结果,返回字符串类型
<>.find_parents()先辈节点中搜索,返回列表类型
<>.find_parent()先辈节点中返回查找到的第一个结果字符串类型
<>.find_next_siblings()后续平行节点中搜索,返回列表类型
<>.find_next_sibling()后续平行节点返回查找到的第一个结果,返回字符串类型
<>.fing_previous_siblings()

前序平行节点中搜索,返回列表类型

<>.fing_previous_sibling()前序平行节点返回第一个,返回字符串类型

原课程为北京理工大学嵩天老师开设的《python网络爬虫与信息提取》

详情移步点击打开链接


版权声明:本文为LitaVadaski原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/LitaVadaski/article/details/79283521