Python中BeautifulSoup模块详解

目录

前言

    BeautifulSoup是主要以解析web网页的Python模块,它会提供一些强大的解释器,以解析网页,然后提供一些函数,从页面中提取所需要的数据,目前是Python爬虫中最常用的模块之一。

安装库

       在使用前需要安装库,这里建议安装bs4,也就是第四版本,因为根据官方文档第三版的已经停止更新。同时安装lxml解释器

pip3 install bs4

pip3 install lxml

导入库

from bs4 import BeautifulSoup

解析文档示例

        这里以官方文档进行举例,我把常用的函数都举出来,实际开发过程中用到的不多,了解就可以。

# 取自《爱丽丝梦游仙境》的一段
html = \"\"\"
    <html><head><title>The Dormouse\'s story</title></head>
    <body>
    <p class=\"title\" name=\"dromouse\"><b>The Dormouse\'s story</b></p>
    <p class=\"story\">Once upon a time there were three little sisters; and their names were
    <a href=\"http://example.com/elsie\" class=\"sister\" id=\"link1\"><!--Elsie--></a>,
    <a href=\"http://example.com/lacsie\" class=\"sister\" id=\"link2\">Lacie</a> and
    <a href=\"http://example.com/title\" class=\"sister\" id=\"link3\">Tillite</a>;
    and they lived at the bottom of a well.</p>
    <p class=\"story\">...</p>
\"\"\"
 
# 解析文档,建立一个BeautifulSoup对象,各种函数都是针对此对象展开,此函数会自动编码为Unicode
 
soup = BeautifulSoup(html,\'lxml\')

此函数有两个参数:

1、需要解析的文本,可以使字符串,可以使本地文件

2、解释器,这里有"lxml", "lxml-xml", "html.parser", or "html5lib",4种,可以解析绝大多数网页,常用lxml解析    这里有一个坑,如果网页中没有规定编码格式,解释器就不能编码为Unicode,必须先声明一下编码格式,只需要到网页源码中查找编码格式然后做个声明就可以。一般在网页中查找charset关键字。

# 美化文档,有些网页书写不规范,这个函数会补全标签,使其看起来更规范
print(soup.prettify())

提取数据示例

        获取到文本后,接下来需要提取我们所需的数据,这里用到选择器 有三种选择器        

标签选择器(tag选择器)

标准选择器

CSS选择器

1、标签选择器(tag选择器)

# 直接用标签获取标题
print(\"title: \", soup.title)
# 获取标题文本
print(soup.title.text)
# 获取p标签
print(soup.p)
# 获取head标签
print(soup.head)
# 获取a标签
print(soup.a)

输出: 

Python中BeautifulSoup模块详解

标签中最重要的俩个属性:name、attributes

# 使用.name函数获取标签名
print(\'标题标签的名字: \', soup.title.name)
# tag的属性用法和字典基本一样,可以用属性名取属性,类似字典的键值对,也可以用.attrs取属性:
print(\'a标签中属性为\"href\"的值: \', soup.a[\"href\"])
# 会返回一个字典,需要何种属性可自行提取
print(\'a标签的所有属性: \',soup.a.attrs)
dict1 = soup.a.attrs
# 属性为class的值
print(\'属性为class的值: \', dict1[\'class\'])

输出:

Python中BeautifulSoup模块详解

这里的子孙父兄节点,我感觉用起来忒不顺手,可能是我学的不太彻底

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容