安装:pip install bs4,pip install lxml 文档:https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/ 对象的实例化 from bs4 import BeautifulSoup 1、将本地的html文档中的数据加载到该对象中 fp = open('./test.html', 'r' , encoding='utf-8' ) soup = BeautifulSoup(fp, 'lxml' ) 2、将互联网上获取的页面源码加载到该对象中 response = requests.get(url, data, heade 在Python的网络爬虫开发中,BeautifulSoup是一个非常重要的库,它主要用于解析HTML和XML文档。本篇文章将详细讲解如何使用bs4库进行网页数据的抓取和解析。 安装BeautifulSoup库非常简单,只需在命令行或终端中运行以下命令: ```bash pip install bs4 pip install lxml ``` `lxml`是一个额外的解析器,它提供了更快的解析速度,通常与BeautifulSoup一起使用。 接下来,我们介绍如何实例化BeautifulSoup对象。有两种主要方式: 1. 读取本地HTML文件: ```python from bs4 import BeautifulSoup fp = open('./test.html', 'r', encoding='utf-8') soup = BeautifulSoup(fp, 'lxml') ``` 2. 从网络获取HTML内容: ```python import requests response = requests.get(url, data, headers=headers) page_text = response.text soup = BeautifulSoup(page_text, 'lxml') ``` BeautifulSoup提供了多种方法和属性来解析HTML数据: 1. **标签定位**: - `soup.tagName`:返回文档中第一次出现的`tagName`对应的标签。 - `soup.find('tagName')`:等同于`soup.tagName`,找到第一个匹配的标签。 - `soup.find_all('tagName')`:返回所有符合要求的标签,结果是一个列表。 2. **属性定位**: - `soup.find('div', class_='className')` 或 `soup.find('div', id='someId')`:通过class或id属性定位元素。 - 更复杂的属性定位可以通过字典形式传入,如 `soup.find('div', attrs={'class': 'className', 'id': 'someId'})`。 3. **CSS选择器**: - `soup.select('selector')`:使用CSS选择器选取元素,返回的是一个列表。例如: - `soup.select('.tang > ul > li > a')`:选择`.tang`类下,`ul`的子元素`li`的直接子元素`a`。 - `soup.select('.tang > ul a')`:选择`.tang`类下,`ul`的后代元素`a`。 4. **获取标签内的文本数据**: - `soup.a.text` 或 `soup.a.string`:获取标签`a`内的文本内容。 - `soup.get_text()`:获取整个文档的文本内容,不包括HTML标签。 5. **获取标签的属性值**: - `soup.a['href']`:获取`a`标签的`href`属性值。 下面是一个实际的爬虫例子,展示了如何使用bs4库爬取《三国演义》小说的内容: ```python import requests from bs4 import BeautifulSoup headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'} url = 'http://www.shicimingju.com/book/sanguoyanyi.html' page_text = requests.get(url, headers=headers).text soup = BeautifulSoup(page_text, 'lxml') li_list = soup.select('.book-mulu > ul > li') fp = open('./三国演义.txt', 'w', encoding='utf-8') for li in li_list: title = li.a.string detail_url = 'http://www.shicimingju.com' + li.a['href'] detail_page_text = requests.get(detail_url, headers=headers).text detail_soup = BeautifulSoup(detail_page_text, 'lxml') div_tag = detail_soup.find('div', class_='chapter_content') content = div_tag.text fp.write(title + ':' + content + '\n') print(title, '爬取成功!!') print('数据爬取结束!!') ``` 这个示例中,我们首先访问小说目录页面,获取每一章节的标题和链接,然后对每个章节的详情页进行访问,抓取章节内容,并保存到文本文件中。 BeautifulSoup库是Python爬虫开发中不可或缺的一部分,它提供了强大的HTML解析功能,使得我们可以方便地从网页中提取所需的数据。通过学习和熟练掌握bs4,开发者能够高效地构建自己的网络爬虫项目。
- 粉丝: 5
- 资源: 956
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助