任务描述
本关任务:使用 BeautifulSoup 解析网页爬取古诗词的内容部分。
相关知识
为了完成本关任务,你需要掌握:BeautifulSoup 的使用。
BeautifulSoup 库的安装
BeautifulSoup 和 lxml 一样,BeautifulSoup 也是一个 HTML/XML 的解析器,主要的功能也是解析和提取 HTML/XML 数据。
如果本地 Python 环境没有安装 BeautifulSoup,可以在命令提示符窗口输入命令pip install bs4,安装 BeautifulSoup 模块,如下图所示。
BeautifulSoup 库的使用
要使用 BeautifulSoup 库,首先需要进行导包,代码如下:
from bs4 import BeautifulSoup
然后需要创建 BeautifulSoup 对象,现在有包含 HTML 代码的字符串变量 text 如下所示:
text='''<?xml version="1.0" encoding="ISO-8859-1"?><bookstore><book><title lang="eng">Harry Potter</title><price>29.99</price></book><book><title lang="eng">Learning XML</title><price>39.95</price></book></bookstore>'''
创建 BeautifulSoup 对象的代码如下所示:
soup=BeautifulSoup(text, 'lxml')
BeautifulSoup 对象包含很多有用的属性和方法,比如我们想要将 HTML 代码按照标准缩进格式输出,可以使用.prettify()方法,如下图所示。
BeautifulSoup 对象更多有用的属性和方法演示代码如下所示,自己可以在本地进行体验操作:
print(soup.get_text()) # 会将 HTML 文档中的所有标签清除,返回一个只包含文字的字符串tag=soup.title # 获取title标签print(tag)print(type(tag)) # tag类型print(tag.name) # 标签名称print(tag.attrs) # 标签属性print(tag.attrs["lang"]) # 单独获取某个属性print(soup.title["lang"]) # 单独获取某个属性# find_all() 返回所有的title元素print(soup.find_all('title'))# find() 返回第一个title元素print(soup.find("title"))print(soup.find_all("title",lang="eng")) # 查找title标签 属性lang=engprint(soup.find_all("title",{"lang":"eng"})) # 结果同上print(soup.find_all(["title","price"])) # 获取多个标签print(soup.find_all("title",lang="eng")[0].get_text()) # 获取文本print(soup.book) # 获取book节点信息print(soup.book.contents) # 获取book下的所有子节点print(soup.book.contents[1]) # 获取book下的所有子节点中的第一个节点print(soup.title.next_sibling) # 获取该节点的下一个兄弟节点print(soup.title.previous_sibling) # 获取该节点的上一个兄弟节点print(soup.title.next_siblings) # 获取该节点的全部兄弟节点
编程要求
根据提示,在右侧编辑器 Begin-End 区间补充代码,完善函数 get_data(),使用 bs4 解析爬取古诗词网古诗的内容部分,并将内容以列表形式返回。src/step2/test.html 为爬取网页的效果代码,可以使用开发者工具审查元素,查看古诗的内容部分位于哪个标签。
测试说明
平台会对你编写的代码进行测试,当评测出现 Django 启动失败时,重新评测即可。
开始你的任务吧,祝你成功!
import requestsfrom bs4 import BeautifulSoupdef get_data(url, headers):'''两个参数:param url:统一资源定位符,请求网址:param headers:请求头:return data:list类型的所有古诗内容'''# ***************** Begin ******************** #response = requests.get(url, headers=headers)response.encoding = "utf-8"html = response.textsoup = BeautifulSoup(html, 'lxml')data = soup.find('div', {'class': 'left'}).ul.find_all('li')data = [i.p.text for i in data]# ****************** end ********************* #return data

本文介绍如何使用BeautifulSoup库解析HTML/XML文件,包括库的安装、基本用法及示例代码。通过具体实例展示了如何从HTML中提取所需信息。

被折叠的 条评论
为什么被折叠?



