null119 发表于 2018-4-18 18:19

笔趣阁小说下载

本帖最后由 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:}

null119 发表于 2018-4-19 22:26

夏橙M兮 发表于 2018-4-19 13:01
楼主,感谢分享。不错,我试了下。为什么不是按顺序的呀?

你可以打开合并后的小说看下,顺序有没有错乱:lol,至于你说的为什么没有按顺序下载,注意代码中的以下两句:
pool = ThreadPool(multiprocessing.cpu_count())
results = pool.map(downtxt,urllist)

mosou 发表于 2018-4-25 20:35

莫小应 发表于 2018-4-25 18:24
等你学了php就不会去想着学python了,至少很长一段时间是不会的

哈哈C基础都有的看什么语法都差不多

mosou 发表于 2018-4-18 18:39

给你点个赞。。。PY还得我学完php后下一个的目标

我是胡戈 发表于 2018-4-18 19:24

楼主威武

thyonezhy 发表于 2018-4-18 19:26

感谢分享

HU129131 发表于 2018-4-18 20:05

感谢分享长学问了

cns拉斯 发表于 2018-4-18 22:02

感谢分享。

ldqiang 发表于 2018-4-19 06:47

纯粹不会,白瞎楼主的好意了,谢谢了。先让我哭会儿。

君月栩 发表于 2018-4-19 08:21

楼主,有什么好的学习爬虫的方法吗?我入了一点门后,一直没进步了

null119 发表于 2018-4-19 08:38

君月栩 发表于 2018-4-19 08:21
楼主,有什么好的学习爬虫的方法吗?我入了一点门后,一直没进步了

多写,试着举一反三{:1_921:}

wushaominkk 发表于 2018-4-19 08:56

欢迎大佬经常来编程区发布文章{:1_927:}
页: [1] 2 3 4
查看完整版本: 笔趣阁小说下载