前言
嗨喽,大家好呀~这里是爱看美女的茜茜呐
对于广大书虫而言,没有小说看是最痛苦的,你身边有这样的人吗?
今天咱们分享一个小说下载器代码,打包成exe后,发给你的小伙伴也能直接使用…
案例基本实现思路?
一、数据来源分析
明确需求:
-
采集的网站是什么?
-
采集的数据是什么?
标题/内容
分析 标题/内容 是从哪里来的
通过浏览器自带工具: 开发者工具抓包分析
-
打开开发者工具: F12 / 鼠标右键点击检查选择network
-
刷新网页
-
搜索数据, 找到数据包
二. 代码实现步骤
-
发送请求, 模拟浏览器对于url地址发送请求
-
请求链接: https://www.***.net/1_1631/3047505.html
-
获取数据, 获取服务器返回响应数据内容
开发者工具: response
-
解析数据, 提取我们想要的数据内容
标题/内容
-
保存数据, 把数据保存本地文件
代码实现
在开始之前,为了防止大家代码看不懂,我特地录制了一套详细教程
教程和代码,直接在文末名片自取就好了 点击此处跳转文末名片
一、单张小说下载
发送请求, 模拟浏览器对于url地址发送请求
获取数据, 获取服务器返回响应数据内容
import requests
# 请求链接
url = 'https://www.****.net/1_1631/3047505.html'
# 模拟浏览器 headers 请求头
headers = {
# user-agent 用户代理 表示浏览器基本身份信息
'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
# 发送请求
response = requests.get(url=url, headers=headers)
# <Response [200]> 响应对象, 表示请求成功
print(response)
print(response.text)
解析数据,提取我们想要的数据内容。
import requests # 数据请求
import re # 正则
import parsel # 数据解析
# 请求链接
url = 'https://www.****.net/1_1631/3047505.html'
# 模拟浏览器 headers 请求头
headers = {
# user-agent 用户代理 表示浏览器基本身份信息
'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
# 发送请求
response = requests.get(url=url, headers=headers)
# <Response [200]> 响应对象, 表示请求成功
print(response)
# 获取下来response.text <html字符串数据>, 转成可解析对象
selector = parsel.Selector(response.text)
# 提取标题
title = selector.xpath('//*[@class="bookname"]/h1/text()').get()
# 提取内容
content = '\n'.join(selector.xpath('//*[@id="content"]/text()').getall())
print(title)
print(content)
保存数据
# 数据请求模块
import requests
# 正则表达式模块
import re
# 数据解析模块
import parsel
# 请求链接
url = 'https://www.****.net/1_1631/3047505.html'
# 模拟浏览器 headers 请求头
headers = {
# user-agent 用户代理 表示浏览器基本身份信息
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
# 发送请求
response = requests.get(url=url, headers=headers)
# <Response [200]> 响应对象, 表示请求成功
print(response)
# 获取下来response.text <html字符串数据>, 转成可解析对象
完整源码、解答、教程皆+VX:pytho8987获取,记得验证备注“777”
selector = parsel.Selector(response.text)
# 提取标题
title = selector.xpath('//*[@class="bookname"]/h1/text()').get()
# 提取内容
content = '\n'.join(selector.xpath('//*[@id="content"]/text()').getall())
print(title)
print(content)
# title <文件名> '.txt' 文件格式 a 追加保存 encoding 编码格式 as 重命名
with open(title + '.txt', mode='a', encoding='utf-8') as f:
"""
第一章 标题
小说内容
第二章 标题
小说内容
"""
# 写入内容
f.write(title)
f.write('\n')
f.write(content)
f.write('\n')
二、整本小说下载
# 数据请求模块
import requests
# 正则表达式模块
import re
# 数据解析模块
import parsel
# 文件操作模块
import os
# 请求链接: 小说目录页
list_url = 'https://www.biqudu.net/1_1631/'
# 模拟浏览器 headers 请求头
headers = {
# user-agent 用户代理 表示浏览器基本身份信息
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
# 发送请求
html_data = requests.get(url=list_url, headers=headers).text
# 提取小说名字
name = re.findall('<h1>(.*?)</h1>', html_data)[0]
# 自动创建一个文件夹
file = f'{name}\\'
if not os.path.exists(file):
os.mkdir(file)
# 提取章节url
url_list = re.findall('<dd> <a style="" href="(.*?)">', html_data)
# for循环遍历
for url in url_list:
index_url = 'https://www.****.net' + url
print(index_url)
headers = {
# user-agent 用户代理 表示浏览器基本身份信息
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
# 发送请求
response = requests.get(url=index_url, hea