本帖最后由 Wikin 于 2019-3-1 22:29 编辑
首先献上代码
[Asm] 纯文本查看 复制代码 print('''---------注明------------
小说编码:是起点小说打开某部作品时的网址位置的那一串数字
章节数:输入适当的数字,是从第一章到你输入的递增获取,不能从中间开始 (实际==懒得弄了....)
vip章节不可获取(获取下来的不完整)
保存路径:请在本地计算机中的某个位置将地址栏的位置进行复制粘贴操作即可
闲戏提醒您:
代码千万条,我说第一条
输入不规范,软件必玩完
--------------------------''')
headpools = [
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60',
'Opera/8.0 (Windows NT 5.1; U; en)',
'Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50',
'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER',
'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; QQBrowser/7.0.3698.400)',
'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 SE 2.X MetaSr 1.0',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.3.4000 Chrome/30.0.1599.101 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.3.4000 Chrome/30.0.1599.101 Safari/537.36'
]
import urllib.request,re,random
def ua():
a = random.choice(headpools)
user_agen = ('User-Agent',a)
ua_1 = urllib.request.build_opener()
ua_1.add_handlers = [user_agen]
urllib.request.install_opener(ua_1)
for i in range(3):
code = input('请输入起点小说编码:')
d = input('下载章节数:')
while True:
try:
d = int(d)
break
except:
d = input('请输入正确下载章节数量:')
dir = input('文件保存路径:').replace('\\',r'\\')+r'\\'
ua()
path = ',"cU":"(.*?)"'
data = urllib.request.urlopen('https://read.qidian.com/ajax/book/category?_csrfToken=W3Qw76uPjNrWkGswLpkjV5faKrFYI84CMGrLiRmu&bookId='+code).read().decode('utf-8','ignore')
screen = re.compile(path).findall(data) #筛选各个章节的网址乱码
for i in range(d): # 循环次数,及第0-X章节
data_1 = urllib.request.urlopen('https://read.qidian.com/chapter/'+screen[i]).read().decode('utf-8','ignore')
path_1 = '<div class="read-content j_readContent">(.*?)</div>'
screen_1 = re.compile(path_1,re.S).findall(data_1) # 正文一筛选
path_2 = '<p>\u3000\u3000'
screen_2 = re.sub(path_2,'\n\n',screen_1[0]) # 正文二筛选
path_name = 'rName">(.*?)</h3>'
name = re.compile(path_name).findall(data_1) # 章节名筛选
file = open(dir+name[0]+'.txt','w')
file.write(screen_2)
file.close()
print('下载完成:'+name[0])
然后附上打包好的小软件,没想到软件有点大= =5M
链接:https://pan.baidu.com/s/1kCW9dTgIFNmiORlHohMkWw
提取码:2pve
没有做ui(原因感觉麻烦,而且我也真的不会- -)所以界面很---cmd... 将就着玩吧
还有一点就是代码中提醒的不规范内容,请一定要规范输入,不然真的是会崩溃的,虽然没啥大问题- - 可能吧
求大佬来喷我!!我要进步,我要在一片喷声中进步,
说明下:百度网盘里放的是代码打包的小软件,软件非vip不能获取!下载章节数输入的数量超出应有章节数会致错,小说编码不对会致错,文件保存路径不存在会致错
所以务必规范输入,虽然上述问题均可被try掉,但是没必要,个人用的怎么简单怎么来对吧。
代码改进(补充):
screen_2 = re.sub(path_2,'\n\n ',screen_1[0]) # 正文二筛选这个位置的\n\n改为\n\n ,后面有4个空格这样生成的文件每段都会有空两格的样式,he样看会比较适合大家吧----------------------------------------------------对原本的以下代码[Asm] 纯文本查看 复制代码 file.write(screen_2)
file.close()
print('下载完成:' + name[0]) 更改为以下代码。[Asm] 纯文本查看 复制代码 path_book = '<title>(.*?)_'
screen_book = re.compile(path_book).findall(data_1) # 书名筛选
file = open(dir+screen_book[0]+'.txt','a')
file.write('\n'+screen_name[0]+screen_2)
file.close()
print('下载完成:'+screen_book[0]) 以此满足15楼同学!!代码更改后,创建的文件名为书名而非章节名,只会创建一个txt文件,然后把所有的后续章节追加到该文件。------------------------------------------------------file.write(name[0]+screen_2)这个位置的写入加上章节名称,满足30楼同学
另外:非常欢迎各位同学继续指点内容,看我能不能满足各位同学咯❀❀❀❀
|