第2关:BeautifulSoup解析网页

  • 任务描述
  • 相关知识
    • BeautifulSoup 库的安装
    • BeautifulSoup 库的使用
  • 编程要求
  • 测试说明

任务描述

本关任务:使用 BeautifulSoup 解析网页爬取古诗词的内容部分。

相关知识

为了完成本关任务,你需要掌握:BeautifulSoup 的使用。

BeautifulSoup 库的安装

BeautifulSoup 和 lxml 一样,BeautifulSoup 也是一个 HTML/XML 的解析器,主要的功能也是解析和提取 HTML/XML 数据。

如果本地 Python 环境没有安装 BeautifulSoup,可以在命令提示符窗口输入命令pip install bs4,安装 BeautifulSoup 模块,如下图所示。

BeautifulSoup 库的使用

要使用 BeautifulSoup 库,首先需要进行导包,代码如下:

 
  
  1. from bs4 import BeautifulSoup

然后需要创建 BeautifulSoup 对象,现在有包含 HTML 代码的字符串变量 text 如下所示:

 
  
  1. text='''
  2. Harry Potter
  3. 29.99
  4. Learning XML
  5. 39.95
  6. '''

创建 BeautifulSoup 对象的代码如下所示:

 
  
  1. soup=BeautifulSoup(text, 'lxml')

BeautifulSoup 对象包含很多有用的属性和方法,比如我们想要将 HTML 代码按照标准缩进格式输出,可以使用.prettify()方法,如下图所示。

BeautifulSoup 对象更多有用的属性和方法演示代码如下所示,自己可以在本地进行体验操作:

 
  
  1. print(soup.get_text()) # 会将 HTML 文档中的所有标签清除,返回一个只包含文字的字符串
  2. tag=soup.title # 获取title标签
  3. print(tag)
  4. print(type(tag)) # tag类型
  5. print(tag.name) # 标签名称
  6. print(tag.attrs) # 标签属性
  7. print(tag.attrs["lang"]) # 单独获取某个属性
  8. print(soup.title["lang"]) # 单独获取某个属性
  9. # find_all() 返回所有的title元素
  10. print(soup.find_all('title'))
  11. # find() 返回第一个title元素
  12. print(soup.find("title"))
  13. print(soup.find_all("title",lang="eng")) # 查找title标签 属性lang=eng
  14. print(soup.find_all("title",{"lang":"eng"})) # 结果同上
  15. print(soup.find_all(["title","price"])) # 获取多个标签
  16. print(soup.find_all("title",lang="eng")[0].get_text()) # 获取文本
  17. print(soup.book) # 获取book节点信息
  18. print(soup.book.contents) # 获取book下的所有子节点
  19. print(soup.book.contents[1]) # 获取book下的所有子节点中的第一个节点
  20. print(soup.title.next_sibling) # 获取该节点的下一个兄弟节点
  21. print(soup.title.previous_sibling) # 获取该节点的上一个兄弟节点
  22. print(soup.title.next_siblings) # 获取该节点的全部兄弟节点

编程要求

根据提示,在右侧编辑器 Begin-End 区间补充代码,完善函数 get_data(),使用 bs4 解析爬取古诗词网古诗的内容部分,并将内容以列表形式返回。src/step2/test.html 为爬取网页的效果代码,可以使用开发者工具审查元素,查看古诗的内容部分位于哪个标签。

测试说明

平台会对你编写的代码进行测试,当评测出现 Django 启动失败时,重新评测即可


开始你的任务吧,祝你成功!

  1. import requests
  2. from bs4 import BeautifulSoup
  3. def get_data(url, headers):
  4. '''
  5. 两个参数
  6. :param url:统一资源定位符,请求网址
  7. :param headers:请求头
  8. :return data:list类型的所有古诗内容
  9. '''
  10. # ***************** Begin ******************** #
  11. response = requests.get(url, headers=headers)
  12. response.encoding = "utf-8"
  13. html = response.text
  14. soup = BeautifulSoup(html, 'lxml')
  15. data = soup.find('div', {'class': 'left'}).ul.find_all('li')
  16. data = [i.p.text for i in data]
  17. # ****************** end ********************* #
  18. return data

你可能感兴趣的:(python,python刷题,python,html)