解析库BeautifulSoup使用

Posted youxiu123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解析库BeautifulSoup使用相关的知识,希望对你有一定的参考价值。

介绍

Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据。官方解释如下:

技术图片
Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。

Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。

Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。
技术图片

使用方法

技术图片
(1) 根据标签名查找
    - suop.a 只能找到第一个符合要求的标签
(2) 获取属性值
    - suop.a.attrs         获取a所有的属性和属性值,返回一个字典
    - suop.a.attrs["href"] 获取href属性值
    - suop.a["href"]       简写为这种形式
(3) 获取内容
    - suop.a.string        获取标签中直系的文本内容
    - suop.a.text          获取所有标签中的文本内容
    - suop.a.get_text()    获取所有标签中的文本内容
   【注意】如果标签中还有标签,那么string获取到的结果为None,其他两个方法可以获取到文本内容
(4) find 找到第一个符合要求的标签
    - suop.find("a")       找到第一个符合要求的
    # 根据标签中的属性获取指定的a标签
    - suop.find("a", class_="xxx")  # class是关键字需要加_
    - suop.find("a", id="xxx")
    - suop.find("a", href="xxx")
    - suop.find("a", alt="xxx")
    - suop.find("a", tetle="xxx")
    # 可以和获取内容的方法连用
    - suop.find("a",href="/hecheng/27.html").text
(5) find_all 找到所有符合要求的标签
    - suop.find_all("a")
    - suop.find_all(["a","p"])  找到所有a标签和p标签
    - suop.find_all(["a","p"],limit=2)   取前两个
(6) 根据选择器选择指定的内容
    select:suop.select("#id")
    - 常见的选择器:标签选择器(a)|类选择器(.)|id选择器(#)|层级选择器
    - 层级选择器:
        div .mm         div下面所有class属性值为mm的,子子孙孙,下面多级
        div > .dd       div儿子级class属性为dd的,下面一级
    【注意】查询到的是所有数据,返回列表
技术图片

项目演示

技术图片
import requests
import lxml
from bs4 import BeautifulSoup
url = "http://www.shicimingju.com/book/sanguoyanyi.html"
response = requests.get(url).text 
suop = BeautifulSoup(response,‘lxml‘) # 实例化对象,使用lxml进行解析
a_list = suop.select(‘.book-mulu > ul > li > a‘)
url = "http://www.shicimingju.com"
for a in a_list:
    fiction_name = a.string   # 小说章节名称
    fiction_url = url+a["href"]  # 小说章节url地址
    response = requests.get(fiction_url).text  # 请求每个章节的url地址
    suop = BeautifulSoup(response,‘lxml‘)
    content = suop.find("div",class_="chapter_content").text  # 获取标签内所有文本数据
    with open("./.txt".format(fiction_name),"w",encoding="utf-8") as fp:
        fp.write(content)
print("下载成功!!!")
技术图片

select选择器选择a标签中的文本内容和gref属性

技术图片

效果

技术图片

以上是关于解析库BeautifulSoup使用的主要内容,如果未能解决你的问题,请参考以下文章

BeautifulSoup 解析后返回间隔文本

使用 BeautifulSoup 解析未关闭的 `<br>` 标签

网络爬虫BeautifulSoup库的使用

CSS 选择器:BeautifulSoup4

Python BeautifulSoup库使用

跟着知识追寻者学BeautifulSoup,你学不会打不还口,骂不还手