赞
踩
Python是一门强大的编程语言,在网络爬虫方面也有着广泛的应用。本文将介绍如何使用Python爬取网络小说,并将其保存到数据库中。
首先,我们需要了解要爬取的网站的结构和数据格式。以笔者熟悉的笔趣阁(https://www.biquge5200.cc/)为例,每本小说的章节都以一个链接的形式呈现在小说目录页面上。
我们可以从小说目录页面获取每个章节的链接,然后通过这些链接访问每个章节的内容,并将其保存到数据库中。
接下来,我们需要安装所需的Python库。本文使用的是requests、BeautifulSoup和pymysql库。
requests库用于发送HTTP请求和获取响应,BeautifulSoup库用于解析HTML页面,pymysql库用于连接和操作MySQL数据库。
1pip install requests
2pip install beautifulsoup4
3pip install pymysql
然后我们编写Python代码。首先,我们需要导入所需的库:
1import requests
2from bs4 import BeautifulSoup
3import pymysql
接下来,我们需要连接到MySQL数据库。在本地环境中,我们可以使用XAMPP或MAMP等软件来创建和管理数据库。
在连接到数据库之前,我们需要创建一个数据库和一个数据表来存储小说数据。在MySQL命令行中输入以下命令:
1CREATE DATABASE novel;
2USE novel;
3CREATE TABLE IF NOT EXISTS chapters (
4 id INT NOT NULL AUTO_INCREMENT,
5 title VARCHAR(255) NOT NULL,
6 content TEXT NOT NULL,
7 PRIMARY KEY (id)
8);
这将创建一个名为novel的数据库,以及一个名为chapters的数据表,其中包含id、title和content三个字段。
id字段是一个自增的整数,title和content字段分别用于存储章节标题和内容。
接下来,我们需要定义一个函数来获取小说目录页面的HTML代码,并从中提取每个章节的链接。
对于笔趣阁网站,每个小说的目录页面的URL格式为“https://www.biquge5200.cc/xiaoshuodaquan/”,其中xiaoshuodaquan是小说的ID。
因此,我们可以使用格式化字符串来构造目录页面的URL。该函数的代码如下:
1def get_chapter_urls(novel_id):
2 url = f'https://www.biquge5200.cc/{novel_id}/'
3 res = requests.get(url)
4 soup = BeautifulSoup(res.text, 'html.parser')
5 links = soup.select('#list a')
6 urls = []
7 for link in links:
8 url = link.get('href')
9 if url.startswith('/'):
10 url = f'https://www.biquge5200.cc{url}'
11 urls.append(url)
12 return urls
在这个函数中,我们首先构造目录页面的URL,然后使用requests库向服务器发送HTTP请求,并使用BeautifulSoup库解析HTML代码。
我们可以使用CSS选择器“#list a”来选择所有章节链接的元素。
然后,我们从每个链接中提取URL,并将其添加到一个列表中。最后,我们返回该列表。
接下来,我们需要定义一个函数来获取每个章节的HTML代码,并从中提取章节标题和内容。该函数的代码如下:
1def get_chapter_content(url):
2 res = requests.get(url)
3 soup = BeautifulSoup(res.text, 'html.parser')
4 title = soup.select_one('.bookname h1').text
5 content = soup.select_one('#content').text
6 return title, content
在这个函数中,我们首先使用requests库向服务器发送HTTP请求,并使用BeautifulSoup库解析HTML代码。
然后,我们使用CSS选择器“.bookname h1”和“#content”来选择章节标题和内容的元素,并从中提取文本。最后,我们返回标题和内容。
最后,我们需要定义一个主函数来连接到数据库、获取章节链接、获取章节内容,并将其保存到数据库中。该函数的代码如下:
1def main(novel_id):
2 conn = pymysql.connect(
3 host='localhost',
4 user='root',
5 password='',
6 database='novel'
7 )
8 urls = get_chapter_urls(novel_id)
9 for url in urls:
10 title, content = get_chapter_content(url)
11 with conn.cursor() as cursor:
12 sql = 'INSERT INTO chapters (title, content) VALUES (%s, %s)'
13 cursor.execute(sql, (title, content))
14 conn.commit()
15 conn.close()
在这个函数中,我们首先使用pymysql库连接到数据库。然后,我们获取小说的所有章节链接,并使用for循环遍历每个链接。
对于每个链接,我们使用get_chapter_content函数获取章节标题和内容,并使用pymysql库将它们插入到数据表中。最后,我们关闭数据库连接。
现在我们已经编写了Python代码,可以使用以下命令来运行它:
1main('123456')
其中,123456是小说的ID,可以替换为任何其他小说的ID。运行代码后,我们可以在MySQL命令行中执行以下命令,来查看数据表中的数据:
1SELECT * FROM chapters;
以上就是使用Python爬取网络小说并保存到数据库的完整过程。需要注意的是,爬取网络小说可能涉及版权问题,请在合法授权的情况下进行。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。