Python实现爬虫抓取小说功能示例【抓取金庸小说】
本文将介绍如何使用Python实现爬虫抓取小说的功能,以抓取金庸小说为例。本文将分为以下几个部分:
- 确定目标网站和小说名称
- 分析目标网站的HTML结构
- 编写Python爬虫代码
- 示例说明
确定目标网站和小说名称
首先,我们需要确定要抓取的小说名称和目标网站。在本文中,我们将抓取金庸先生的《天龙八部》小说,目标网站为笔趣阁。
分析目标网站的HTML结构
在确定目标网站和小说名称后,我们需要分析目标网站的HTML结构,以便编写Python爬虫代码。我们可以使用Chrome浏览器的开发者工具来分析HTML结构。以下是分析结果:
- 小说目录页URL:https://www.biquge.com.cn/book/170/
- 小说章节列表所在的HTML元素:
<div id="list">
- 小说章节列表中每个章节的HTML元素:
<dd><a href="xxx.html">章节名称</a></dd>
- 小说正文所在的HTML元素:
<div id="content">
编写Python爬虫代码
在分析目标网站的HTML结构后,我们可以编写Python爬虫代码。以下是示例代码:
import requests
from bs4 import BeautifulSoup
# 目标小说的URL和名称
novel_url = 'https://www.biquge.com.cn/book/170/'
novel_name = '天龙八部'
# 请求头部信息
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
# 获取小说目录页HTML文档
response = requests.get(novel_url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 获取小说章节列表
chapter_list = soup.find('div', id='list').find_all('a')
# 遍历小说章节列表,抓取每个章节的内容
for chapter in chapter_list:
chapter_url = novel_url + chapter['href']
chapter_name = chapter.text
print('正在抓取章节:', chapter_name)
# 获取章节HTML文档
response = requests.get(chapter_url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 获取章节正文
content = soup.find('div', id='content').text
# 将章节正文写入文件
with open(novel_name + '.txt', 'a', encoding='utf-8') as f:
f.write(chapter_name + '\n\n')
f.write(content + '\n\n')
在这个示例中,我们首先定义了目标小说的URL和名称,以及请求头部信息。然后,我们使用requests库发送GET请求,并使用BeautifulSoup库解析HTML文档。接着,我们使用find()函数查找小说章节列表,并使用find_all()函数查找每个章节的HTML元素。最后,我们遍历小说章节列表,抓取每个章节的内容,并将章节正文写入文件。
示例说明
以下是两个示例说明,用于演示Python实现爬虫抓取小说功能示例【抓取金庸小说】的完整攻略:
示例1:抓取指定章节
假设我们只需要抓取小说的前10个章节。我们可以在遍历小说章节列表时,添加一个计数器,当计数器达到10时,退出循环。以下是示例代码:
import requests
from bs4 import BeautifulSoup
# 目标小说的URL和名称
novel_url = 'https://www.biquge.com.cn/book/170/'
novel_name = '天龙八部'
# 请求头部信息
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
# 获取小说目录页HTML文档
response = requests.get(novel_url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 获取小说章节列表
chapter_list = soup.find('div', id='list').find_all('a')
# 遍历小说章节列表,抓取每个章节的内容
count = 0
for chapter in chapter_list:
if count >= 10:
break
chapter_url = novel_url + chapter['href']
chapter_name = chapter.text
print('正在抓取章节:', chapter_name)
# 获取章节HTML文档
response = requests.get(chapter_url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 获取章节正文
content = soup.find('div', id='content').text
# 将章节正文写入文件
with open(novel_name + '.txt', 'a', encoding='utf-8') as f:
f.write(chapter_name + '\n\n')
f.write(content + '\n\n')
count += 1
在这个示例中,我们在遍历小说章节列表时,添加了一个计数器count,并在计数器达到10时,退出循环。
示例2:抓取指定章节范围
假设我们只需要抓取小说的第10到20个章节。我们可以在遍历小说章节列表时,添加一个计数器和一个判断条件,当计数器达到10时,开始抓取章节,当计数器达到20时,退出循环。以下是示例代码:
import requests
from bs4 import BeautifulSoup
# 目标小说的URL和名称
novel_url = 'https://www.biquge.com.cn/book/170/'
novel_name = '天龙八部'
# 请求头部信息
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
# 获取小说目录页HTML文档
response = requests.get(novel_url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 获取小说章节列表
chapter_list = soup.find('div', id='list').find_all('a')
# 遍历小说章节列表,抓取每个章节的内容
count = 0
for chapter in chapter_list:
if count >= 10 and count <= 20:
chapter_url = novel_url + chapter['href']
chapter_name = chapter.text
print('正在抓取章节:', chapter_name)
# 获取章节HTML文档
response = requests.get(chapter_url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 获取章节正文
content = soup.find('div', id='content').text
# 将章节正文写入文件
with open(novel_name + '.txt', 'a', encoding='utf-8') as f:
f.write(chapter_name + '\n\n')
f.write(content + '\n\n')
if count > 20:
break
count += 1
在这个示例中,我们在遍历小说章节列表时,添加了一个计数器count和一个判断条件,当计数器达到10时,开始抓取章节,当计数器达到20时,退出循环。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现爬虫抓取小说功能示例【抓取金庸小说】 - Python技术站