@[TOC] python实现简单的小说下载V1.0

需求来源于很多方面,闲来无事练手了

仅用于练习使用,不建议用在其他方面

建议下载参考对比

先来一段代码

import random
import requests
import re

调用的库有request、random、re

request是用来获取网页,实现网络功能用的
re则是正则匹配,用来获取需求信息
random 用来产生随机信号
模拟人的点击。有些时候不需要,看网站信息

头,很关键

下面展示一些 内联代码片

header = [{'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36'},{'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'},{'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)'},{'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1'},{'User-Agent': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)'}]

如果头缺失直接去访问的话,和容易被终止访问

上手下载函数

def down(a):f=open('C:\\DEL\\surface\\PycharmProjects\\novel\\亿万总裁宠妻上瘾111.txt', 'a', encoding='utf-8')f.write(a + '\n')f.close()def down_novel(text):f = open('C:\\DEL\\surface\\PycharmProjects\\novel\\亿万总裁宠妻上瘾11.txt', 'a', encoding='utf-8')f.write(text + '\n')f.close()

这里根据不同的需求,实现不同的模板地址和文件名

网址获取和正则匹配


def re_do(re_text):
#TODO re
#<dd><a href ="/37_37204/92067619.html">第1章 他的…新娘?</a></dd>
#<li><a href ="(.*?)">(.*?)<span></span></a></li>r1 = '<li><a href ="(.*?)">(.*?)<span></span></a></li>'r2 = re.findall(r1, re_text)#print('https://wwxxx'+r2[1][0])all_add=[]all_tit=[]for i in range(len(r2)):all_add.append(str(r2[i][0]))all_tit.append(str(r2[i][1]))print(str(r2[i][0]))print(str(r2[i][1]))print(str(all_add[i]))#print(r2)#print(len(r2))return all_add, all_tit

这里涉及到了二维数组
由于使用了正则匹配,所以涉及到了匹配数据的容量和数据为的大小

根据得到的网址和文本后续操作

按网址获取网页文本信息,注意编码格式
标题可以沿用上面正则匹配后的标题
这里可以少很多步骤
此处实现文本清洗
不过不是很完善,理由是时间不够
可以用其他工具快速实现补充

def novel_down(url,title):print("准备下载")#print(url)print(title)req1 = requests.get(url,headers=header[random.randint(0, 4)])  # 向目标网站发送 get 请求
#<div class="txt" id="txt">([\s\S]*?)</div>result1 = req1.content#print(result1)result1 = result1.decode('gbk')#print(result1.title())text_re = re.compile(r'<div class="txt" id="txt">([\s\S]*?)</div>')  # 由于正文部分有很多的换行符,故要使用 [\s\S]text1 = re.findall(text_re, result1)  # 找出第第一部分的正文#print(text1)title = titledown_novel(title)novelf = str(text1)text1 = novelf.split('\r')text_1 = []  # 添加一个空列表,用来装处理后的正文for sentence in text1:sentence = sentence.strip()  # 去掉每一句两边的空格if '&nbsp;&nbsp;&nbsp;&nbsp;' in sentence:sentence = sentence.replace('&nbsp;&nbsp;&nbsp;&nbsp;', ' ')  # 去掉句子中的 <br />text_1.append(sentence)else:text_1.append(sentence)if ' ' in sentence:sentence = sentence.replace(' ', '')  # 去掉句子中的  if '<br />' in sentence:sentence = sentence.replace('<br />', '')  # 去掉句子中的 <br />text_1.append(sentence)else:text_1.append(sentence)if '\r' in sentence:sentence = sentence.replace('\r', '\n')  # 去掉句子中的 <br />text_1.append(sentence)else:text_1.append(sentence)if '&nbsp;&nbsp;&nbsp;&nbsp;' in sentence:sentence = sentence.replace('&nbsp;&nbsp;&nbsp;&nbsp;', '')  # 去掉句子中的 <br />text_1.append(sentence)else:text_1.append(sentence)elif '<br />' in sentence:sentence = sentence.replace('<br />', '')text_1.append(sentence)elif '-->><p class="text-danger text-center mg0">本章未完,点击下一页继续阅读</p>' in sentence:sentence = sentence.replace(r'-->><p class="text-danger text-center mg0">本章未完,点击下一页继续阅读</p>','')  # 去掉 -->><p class="text-danger text-center mg0">本章未完,点击下一页继续阅读</p>text_1.append(sentence)elif '&nbsp;&nbsp;&nbsp;&nbsp;' in sentence:sentence = sentence.replace(r'&nbsp;&nbsp;&nbsp;&nbsp;','')  # 去掉 -->><p class="text-danger text-center mg0">本章未完,点击下一页继续阅读</p>text_1.append(sentence)else:text_1.append(sentence)abcd = str(text_1)bcd = abcd.split('\r')for b in range(len(bcd)):down_novel(str(bcd[b]))count = text_1.count('')  # 统计列表中的空字符串for i in range(count):text_1.remove('')  # 移除所有的空字符串

主要环节

for i in range(len(all_add)):title_down=all_tit[i]url_down = 'https:XXXXX' + all_add[i]#print(title_down)novel_down(url_down, title_down)#text = url_down +'   '+title_down#down(text)

使用循环,实现从单网页到多网页循环下载,解放鼠标和双手。
还是在单线程,没有使用多线程

最后,上源代码

#!/user/bin/env python
#-*- coding:utf-8 -*-
#@FileName  :saveone.py
#@time      :2020/6/15
#Author     :jm
#TODO#TODO
import random
import requests
import re
import osheader = [{'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36'},{'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'},{'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)'},{'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1'},{'User-Agent': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)'}]
#https://www.kanshuge.org/23/23636/7130657.html
#url1 = 'https://www.biquge0.cc/book/32967/20858'+'690+i'+'.html'
#url2 = 'https://www.biquge0.cc/book/32967/20858'+'690+i'+'_2'+'.html'#<dd class="col-md-3"><a href="https://www.kanshuge.org/23/23636/7130657.html" title="第1章 替嫁冲喜">第1章 替嫁冲喜</a></dd>def down(a):f=open('C:\\DEL\\urface\\PycharmProjects\\novel\\亿万总裁宠妻上瘾111.txt', 'a', encoding='utf-8')f.write(a + '\n')f.close()def down_novel(text):f = open('C:\\DEL\\urface\\PycharmProjects\\novel\\亿万总裁宠妻上瘾11.txt', 'a', encoding='utf-8')f.write(text + '\n')f.close()def novel_down(url,title):print("准备下载")#print(url)print(title)req1 = requests.get(url,headers=header[random.randint(0, 4)])  # 向目标网站发送 get 请求
#<div class="txt" id="txt">([\s\S]*?)</div>result1 = req1.content#print(result1)result1 = result1.decode('gbk')#print(result1.title())text_re = re.compile(r'<div class="txt" id="txt">([\s\S]*?)</div>')  # 由于正文部分有很多的换行符,故要使用 [\s\S]text1 = re.findall(text_re, result1)  # 找出第第一部分的正文#print(text1)title = titledown_novel(title)novelf = str(text1)text1 = novelf.split('\r')text_1 = []  # 添加一个空列表,用来装处理后的正文for sentence in text1:sentence = sentence.strip()  # 去掉每一句两边的空格if '&nbsp;&nbsp;&nbsp;&nbsp;' in sentence:sentence = sentence.replace('&nbsp;&nbsp;&nbsp;&nbsp;', ' ')  # 去掉句子中的 <br />text_1.append(sentence)else:text_1.append(sentence)if ' ' in sentence:sentence = sentence.replace(' ', '')  # 去掉句子中的  if '<br />' in sentence:sentence = sentence.replace('<br />', '')  # 去掉句子中的 <br />text_1.append(sentence)else:text_1.append(sentence)if '\r' in sentence:sentence = sentence.replace('\r', '\n')  # 去掉句子中的 <br />text_1.append(sentence)else:text_1.append(sentence)if '&nbsp;&nbsp;&nbsp;&nbsp;' in sentence:sentence = sentence.replace('&nbsp;&nbsp;&nbsp;&nbsp;', '')  # 去掉句子中的 <br />text_1.append(sentence)else:text_1.append(sentence)elif '<br />' in sentence:sentence = sentence.replace('<br />', '')text_1.append(sentence)elif '-->><p class="text-danger text-center mg0">本章未完,点击下一页继续阅读</p>' in sentence:sentence = sentence.replace(r'-->><p class="text-danger text-center mg0">本章未完,点击下一页继续阅读</p>','')  # 去掉 -->><p class="text-danger text-center mg0">本章未完,点击下一页继续阅读</p>text_1.append(sentence)elif '&nbsp;&nbsp;&nbsp;&nbsp;' in sentence:sentence = sentence.replace(r'&nbsp;&nbsp;&nbsp;&nbsp;','')  # 去掉 -->><p class="text-danger text-center mg0">本章未完,点击下一页继续阅读</p>text_1.append(sentence)else:text_1.append(sentence)abcd = str(text_1)bcd = abcd.split('\r')for b in range(len(bcd)):down_novel(str(bcd[b]))count = text_1.count('')  # 统计列表中的空字符串for i in range(count):text_1.remove('')  # 移除所有的空字符串# for sentence in text_1:#    print(sentence)  # 打印出所有的正文def re_do(re_text):
#TODO re
#<dd><a href ="/37_37204/92067619.html">第1章 他的…新娘?</a></dd>
#<li><a href ="(.*?)">(.*?)<span></span></a></li>r1 = '<li><a href ="(.*?)">(.*?)<span></span></a></li>'r2 = re.findall(r1, re_text)#print('https://www.jpxs.org'+r2[1][0])all_add=[]all_tit=[]for i in range(len(r2)):all_add.append(str(r2[i][0]))all_tit.append(str(r2[i][1]))print(str(r2[i][0]))print(str(r2[i][1]))print(str(all_add[i]))#print(r2)#print(len(r2))return all_add, all_tit#https://www.jpxs.org/37_37204req1 = requests.get('https:/',headers=header[random.randint(0, 4)])  # 向目标网站发送 get 请求result1 = req1.content
result1 = result1.decode('gbk')#print(req1.text)
down(req1.text)(all_add, all_tit) = re_do(req1.text)
#print(len(all_add))for i in range(len(all_add)):title_down=all_tit[i]url_down = 'httpXXXXX' + all_add[i]#print(title_down)novel_down(url_down, title_down)#text = url_down +'   '+title_down#down(text)

python实现简单的小说下载V1.0相关推荐

  1. 迅雷漫画下载 v1.0(绿色版) 附源码

    发现迅雷网站漫画很全,写了一个用于下载迅雷网站上漫画的工具. http://anime.xunlei.com/Book/sort 这个网址的全部1100多部漫画全部可以打包下载到本地. 只求完成功能, ...

  2. RS Browser Forensics下载|RS Browser Forensics(浏览器提取恢复工具)破解版下载 v1.0

    点击下载来源:RS Browser Forensics下载|RS Browser Forensics(浏览器提取恢复工具)破解版下载 v1.0 RS Browser Forensics是一款十分便民的 ...

  3. 安卓手机小说阅读器_【趣读小说大全APP安卓】趣读小说大全手机app下载 v1.0.0 免费版...

    趣读小说大全APP是一款十分好用的在线小说阅读软件,一款能够让每一个用户都能在这里轻松体验最简单的小说阅读,每天都能在这里发现更多的阅读精彩.趣读小说大全APP手机版转为每一个用户实时推送最新的小说资 ...

  4. 【Python】实现一个小说下载器,可以打包成exe(附原码)

    前言 闲的无聊,现在没得什么好剧追(你们或许可以给我推荐推荐) 朋友都在看小说,那我就来用Python搞一个小说下载器吧 顺便打包一下 实现步骤 爬虫基本四个步骤: 采集一章小说内容 发送请求, 模拟 ...

  5. ae批量修改字体_|AE多文字样式修改脚本(Dojo Text Updater)下载v1.0 官方版 - 欧普软件下载...

    Dojo Text Updater是一款多文字样式修改脚本,有了这款脚本就能够让多个文字图层同时更新样式,包括字体大小.填充颜色.笔触颜色.跟踪和对其等参数,让文字样式修改变得更简单,需要的AE设计师 ...

  6. 手机android游戏制作工具,主题制作工具手机下载_主题制作工具安卓版下载v1.0.4_3DM手游...

    <主题制作工具>不是一款常规的主题类手机软件,它的功能主要是能够让用户进行自己的DIY.用户通过<主题制作工具>可以发挥自己的想象力,创造出拥有自己个性的手机主题,喜欢的朋友不 ...

  7. nuwa android,Nuwa软件-Nuwa(女娲)安卓版下载v1.0.5

    Nuwa是一款能够让用户在手上制作的小动画的软件,通过简单的操作就可以完成一幅动画,让用户发挥自己的想象力制作出一些十分有趣的动画,虽然是在手机上制作但很多小细节都处理的非常好,动作细节非常细致,喜欢 ...

  8. 刀塔霸业android安装包,刀塔霸业安卓下载-刀塔霸业安卓官网版(dota2自走棋)下载v1.0...

    刀塔霸业是V社旗下的一款自走棋手机游戏,是DOTA官方自走棋手游,刀塔霸业游戏中玩家同八名玩家一起战斗,目标就是活到最后一名获胜,玩家要合理搭配英雄,每个英雄都有自己独一无二的能力,将英雄价值最大化, ...

  9. 排球计分系统java_排球计分系统|网世技术排球计分系统下载v1.0官方版 - 欧普软件下载...

    排球计分系统是一款免费的排球比赛计分软件,采用五局三胜制,可以准确的记录双方的得分情况,包括犯规.球员信息.全队得分等信息,支持多种设备输出,是日常排球比赛计分的好工具,有需要的朋友可以来本站下载! ...

最新文章

  1. 请给出一个Scala RDD的HelloWorld例子
  2. 时间序列分析工具:Prophet、statsmodels、DeepAR、Xgboost类模型、RNN类模型
  3. 【GAN优化】详解对偶与WGAN
  4. ISA2006无人值守安装
  5. Give Candies【快速幂+欧拉】
  6. 计算时间差_小王子是怎么用四步法进行时间计算并成功避开日界线的
  7. 在Eclipse中使用Maven创建多模块的层级项目
  8. NBR100多IP出口解决方案的配置方法
  9. 面向对象的程序设计-电梯调度系统的设计、优化与测试
  10. 多线程之使用读写锁ReentrantReadWriteLock实现缓存系统
  11. java 微博 api_Java使用新浪微博API开发微博应用的基本方法
  12. 机器学习系列8:逻辑回归的代价函数
  13. MyBatis Generator 代码生成器窜库问题
  14. 【C语言】创建各类三角形图案
  15. 2000年前毕业,学历在学信网查不到解决方法
  16. java将数据库数据转换成word文档并且生成pdf文件最后转换成对应的图片
  17. 关于uefi启动的笔记本安装win7,win10,Ubuntu三系统
  18. 找高清视频素材,就上这6个网站。
  19. Ubuntu18.04 flash插件安装
  20. K均值与DBSCAN聚类效果

热门文章

  1. mes智能制造管理系统软件
  2. 通达信行情接口合法性校验方式?
  3. Webview加载pdf遇到的一些坑及解决方法
  4. 204道高频Java面试题❤️五万字❤️全路线十八个模块❤️面试10多家中大厂后的总结(建议收藏)
  5. [架构之路-25]:目标系统 - 系统软件 - bootloader uboot内存映射与启动流程
  6. 姑姑:给小学生出点口算题
  7. 【memset函数】
  8. 去掉返回键(KEYCODE_BACK)和任务键(KEYCODE_APP_SWITCH)
  9. UG/NX星空外挂安装
  10. java狗具有特别的接飞盘的方法_如何让狗狗学会接飞盘?简单,这几个技巧让你事半功倍!...