python实现简单的小说下载V1.0
@[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 ' ' in sentence:sentence = sentence.replace(' ', ' ') # 去掉句子中的 <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 ' ' in sentence:sentence = sentence.replace(' ', '') # 去掉句子中的 <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 ' ' in sentence:sentence = sentence.replace(r' ','') # 去掉 -->><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 ' ' in sentence:sentence = sentence.replace(' ', ' ') # 去掉句子中的 <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 ' ' in sentence:sentence = sentence.replace(' ', '') # 去掉句子中的 <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 ' ' in sentence:sentence = sentence.replace(r' ','') # 去掉 -->><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相关推荐
- 迅雷漫画下载 v1.0(绿色版) 附源码
发现迅雷网站漫画很全,写了一个用于下载迅雷网站上漫画的工具. http://anime.xunlei.com/Book/sort 这个网址的全部1100多部漫画全部可以打包下载到本地. 只求完成功能, ...
- RS Browser Forensics下载|RS Browser Forensics(浏览器提取恢复工具)破解版下载 v1.0
点击下载来源:RS Browser Forensics下载|RS Browser Forensics(浏览器提取恢复工具)破解版下载 v1.0 RS Browser Forensics是一款十分便民的 ...
- 安卓手机小说阅读器_【趣读小说大全APP安卓】趣读小说大全手机app下载 v1.0.0 免费版...
趣读小说大全APP是一款十分好用的在线小说阅读软件,一款能够让每一个用户都能在这里轻松体验最简单的小说阅读,每天都能在这里发现更多的阅读精彩.趣读小说大全APP手机版转为每一个用户实时推送最新的小说资 ...
- 【Python】实现一个小说下载器,可以打包成exe(附原码)
前言 闲的无聊,现在没得什么好剧追(你们或许可以给我推荐推荐) 朋友都在看小说,那我就来用Python搞一个小说下载器吧 顺便打包一下 实现步骤 爬虫基本四个步骤: 采集一章小说内容 发送请求, 模拟 ...
- ae批量修改字体_|AE多文字样式修改脚本(Dojo Text Updater)下载v1.0 官方版 - 欧普软件下载...
Dojo Text Updater是一款多文字样式修改脚本,有了这款脚本就能够让多个文字图层同时更新样式,包括字体大小.填充颜色.笔触颜色.跟踪和对其等参数,让文字样式修改变得更简单,需要的AE设计师 ...
- 手机android游戏制作工具,主题制作工具手机下载_主题制作工具安卓版下载v1.0.4_3DM手游...
<主题制作工具>不是一款常规的主题类手机软件,它的功能主要是能够让用户进行自己的DIY.用户通过<主题制作工具>可以发挥自己的想象力,创造出拥有自己个性的手机主题,喜欢的朋友不 ...
- nuwa android,Nuwa软件-Nuwa(女娲)安卓版下载v1.0.5
Nuwa是一款能够让用户在手上制作的小动画的软件,通过简单的操作就可以完成一幅动画,让用户发挥自己的想象力制作出一些十分有趣的动画,虽然是在手机上制作但很多小细节都处理的非常好,动作细节非常细致,喜欢 ...
- 刀塔霸业android安装包,刀塔霸业安卓下载-刀塔霸业安卓官网版(dota2自走棋)下载v1.0...
刀塔霸业是V社旗下的一款自走棋手机游戏,是DOTA官方自走棋手游,刀塔霸业游戏中玩家同八名玩家一起战斗,目标就是活到最后一名获胜,玩家要合理搭配英雄,每个英雄都有自己独一无二的能力,将英雄价值最大化, ...
- 排球计分系统java_排球计分系统|网世技术排球计分系统下载v1.0官方版 - 欧普软件下载...
排球计分系统是一款免费的排球比赛计分软件,采用五局三胜制,可以准确的记录双方的得分情况,包括犯规.球员信息.全队得分等信息,支持多种设备输出,是日常排球比赛计分的好工具,有需要的朋友可以来本站下载! ...
最新文章
- 请给出一个Scala RDD的HelloWorld例子
- 时间序列分析工具:Prophet、statsmodels、DeepAR、Xgboost类模型、RNN类模型
- 【GAN优化】详解对偶与WGAN
- ISA2006无人值守安装
- Give Candies【快速幂+欧拉】
- 计算时间差_小王子是怎么用四步法进行时间计算并成功避开日界线的
- 在Eclipse中使用Maven创建多模块的层级项目
- NBR100多IP出口解决方案的配置方法
- 面向对象的程序设计-电梯调度系统的设计、优化与测试
- 多线程之使用读写锁ReentrantReadWriteLock实现缓存系统
- java 微博 api_Java使用新浪微博API开发微博应用的基本方法
- 机器学习系列8:逻辑回归的代价函数
- MyBatis Generator 代码生成器窜库问题
- 【C语言】创建各类三角形图案
- 2000年前毕业,学历在学信网查不到解决方法
- java将数据库数据转换成word文档并且生成pdf文件最后转换成对应的图片
- 关于uefi启动的笔记本安装win7,win10,Ubuntu三系统
- 找高清视频素材,就上这6个网站。
- Ubuntu18.04 flash插件安装
- K均值与DBSCAN聚类效果
热门文章
- mes智能制造管理系统软件
- 通达信行情接口合法性校验方式?
- Webview加载pdf遇到的一些坑及解决方法
- 204道高频Java面试题❤️五万字❤️全路线十八个模块❤️面试10多家中大厂后的总结(建议收藏)
- [架构之路-25]:目标系统 - 系统软件 - bootloader uboot内存映射与启动流程
- 姑姑:给小学生出点口算题
- 【memset函数】
- 去掉返回键(KEYCODE_BACK)和任务键(KEYCODE_APP_SWITCH)
- UG/NX星空外挂安装
- java狗具有特别的接飞盘的方法_如何让狗狗学会接飞盘?简单,这几个技巧让你事半功倍!...