笔趣阁小说下载
本帖最后由 null119 于 2018-5-4 23:01 编辑话说论坛有不少关于笔趣阁小说网站的贴子了,今天又看到一个,正好无事,用Python写个简单的指定页面小说下载
俗话说无图无真像,先上图:
再上代码:
#coding:utf8
from multiprocessing.dummy import Pool as ThreadPool
import multiprocessing
import requests,os,codecs,time
from lxml import etree
url = 'https://www.biquge5200.com/3_3331/' #要下载的小说章节列表页面url
def getsource(url):
try:
s = requests.get(url)
except:
print('访问异常,跳过~!')
else:
s.encoding = 'gbk'
return s.text
def getlist(url):
global txtname,txtzz
html = getsource(url)
ehtml = etree.HTML(html)
u = ehtml.xpath('//*[@id="list"]/dl/dd/a/@href')
t = ehtml.xpath('//*[@id="list"]/dl/dd/a/text()')
txtname = ehtml.xpath('//*[@id="info"]/h1/text()').replace('\\','').replace('/','').replace(':','').replace('*','').replace('?','').replace('"','').replace('<','').replace('>','').replace('|','')
txtzz = ehtml.xpath('//*[@id="info"]/p/text()').replace('\xa0','')
num = 0
for i in range(9,len(u)):
urllist.append(u+'|'+t+'|'+str(num))
num+=1
def downtxt(url):
global downcount
u = url.split('|')
t = url.split('|')
num = url.split('|')
content = ''
while len(content) == 0:
html = getsource(u)
ehtml = etree.HTML(html)
content = ehtml.xpath('string(//*[@id="content"])').replace(' ','\r\n').replace(' ','\r\n').replace('\xa0','').replace('\ufffd','').replace('\u266a','').replace('readx;','')
if os.path.exists(savepath+num+'.txt'):
print(num+'.txt 已经存在!')
else:
with codecs.open(savepath+num+'.txt', 'a')as f:
f.write('\r\n'+t +'\r\n'+ content)
print(t +' 下载完成!')
downcount+=1
time_start = time.time();
downcount = 0
urllist = []
getlist(url)
savepath = os.getcwd()+'\\'+txtname+'\\'
if os.path.exists(savepath)== False:
os.makedirs(savepath)
pool = ThreadPool(multiprocessing.cpu_count())
results = pool.map(downtxt,urllist)
pool.close()
pool.join()
print('开始合并txt...')
with codecs.open(savepath+txtname+'.txt', 'a')as f:
f.write(txtname)
f.write('\r\n')
f.write(txtzz)
f.write('\r\n')
for i in range(0,len(urllist)):
with open(savepath+str(i)+'.txt', "r") as fr:
txt = fr.read()
f.write(txt)
f.write('===========================')
fr.close()
os.remove(savepath+str(i)+'.txt')
print('小说合并完成~!')
print('')
print('*'*15 + ' 任务完成,结果如下:'+'*'*15)
print('')
print('<'+txtname+'> 下载完成'+',获取并下载章节页面:'+str(downcount)+' 个')
print('')
print('耗时:'+ str(time.time()-time_start)+ ' s')
print('')
print('*'*51)
最后,没有了{:1_911:} 夏橙M兮 发表于 2018-4-19 13:01
楼主,感谢分享。不错,我试了下。为什么不是按顺序的呀?
你可以打开合并后的小说看下,顺序有没有错乱:lol,至于你说的为什么没有按顺序下载,注意代码中的以下两句:
pool = ThreadPool(multiprocessing.cpu_count())
results = pool.map(downtxt,urllist) 莫小应 发表于 2018-4-25 18:24
等你学了php就不会去想着学python了,至少很长一段时间是不会的
哈哈C基础都有的看什么语法都差不多 给你点个赞。。。PY还得我学完php后下一个的目标 楼主威武 感谢分享 感谢分享长学问了 感谢分享。 纯粹不会,白瞎楼主的好意了,谢谢了。先让我哭会儿。 楼主,有什么好的学习爬虫的方法吗?我入了一点门后,一直没进步了 君月栩 发表于 2018-4-19 08:21
楼主,有什么好的学习爬虫的方法吗?我入了一点门后,一直没进步了
多写,试着举一反三{:1_921:} 欢迎大佬经常来编程区发布文章{:1_927:}