最近闲着没事想看小说,找到一个全是南派三叔的小说的网站,决定都下载下来看看,于是动手,在很多QQ群里高手的帮助下(本人正则表达式很烂,程序复杂的正则都是一些高手指导的),花了三四天写了一个脚本

需要 BeautifulSoup 和 requests 两个库

(我已经把注释写得尽量详细)

这个程序的执行速度很慢,求高手告诉我优化的方法!!

#-*-coding:utf8-*-from bs4 import BeautifulSoup
import requests
import re
import os#打开网页将所需的URL读取出来放进一个列表中
r = requests.get('http://www.nanpaisanshu.org/').content  #打开要读取的网页
content=BeautifulSoup(r).findAll('a',href=re.compile(r'\Ahttp://www.nanpaisanshu.org/[a-z]+\Z')) #在网页中找到需要的信息sc = str(content) #转换为string类型lists=[]
lists = sc.split(',')
lists = list(set(lists)) #删除列表中重复信息lisy=[]for line in lists:p=line.split('"')[1]  #按 " 分割,取出需要的信息写进数组lisy.append(p)        #这里已经拥有需要的url#print p
#print lisy#把读取到的URL遍历打开,将所有网页保存到html文件中s = os.getcwd()#当前路径d = os.sep  #系统分隔符namef='aaa' #文件加名称#b = os.path.exists( s+d+namef) #判断是存在f=os.path.exists(s+d+namef) #判断是存在if f==False:os.mkdir(s+d+namef)  #如果文件夹不存在就新建一个
else:print u'已经存在'+nameffilenm = s+d+namef+d    #路径i=1
for line in lisy:r = requests.get(line)   #遍历打开所有urlprint r.contentprint '\n'tfile=open(filenm+'neirong'+str(i)+'.html','w')i=i+1tfile.write(r.content) #将网页内容写入文件#将URL文件中的符合要求的URL读取出来写进一个txt文件中
for i in range(1,len(lisy)+1):fp = open(filenm+'neirong'+str(i)+'.html', "r")of = open(filenm+'neirong'+str(i)+'.txt','w')  content = fp.read()   #将文件内容读取p=re.compile(r'http://www\.nanpaisanshu\.org/.*?\.html') #正则匹配#print p.findall(content)#print type(p.findall(content))for line in p.findall(content):  #print line+'\n'#if line !='http://www.nanpaisanshu.org/9701.html':of.write(line+'\n')  #将匹配到的文件写入另一个文件中#else:#continue#of.write(str(p.findall(content)))#关闭文件
of.close()
fp.close()
tfile.close()#将txtfor i in range(1,len(lisy)+1):ot=open(filenm+'neirong'+str(i)+'.txt','r')outfile=open(filenm+'quanbu'+str(i)+'.txt','a+')li=[]for line in ot:line = line.replace('\n','')li.append(line)   #将url文件中的数据放进列表中li = sorted(li)  #给列表排序for line in li:print line#line = line.replace('\n','')r = requests.get(line).content  #遍历打开所有urltitle=BeautifulSoup(r).find("div",{'class':"post_title"}).h2   #取出标题content=BeautifulSoup(r).findAll("div",{'class':"post_entry"}) #取出内容sti=str(title).replace('<h2>','').replace('</h2>','')  #处理标题,只保留文字#处理内容,只保留文字scon = str(content).replace('<p>','  ').replace('</p>','  ').replace('<br/>','\n')#print str(urllist)scon = re.sub("<.*>", "", scon)scon = re.sub("(.*?);","",scon) #scon = scon.strip()scon = '\n'.join(scon.split())print sconoutfile.write(sti+'\n'+line+'\n'+scon) #将标题和内容写进文件中#i=i+1#print
#print urllistprint '=========================下载结束======================='#关闭文件
outfile.close()
ot.close()#取出指定文件夹下的所有文件名
targetDir=s+d+namef
for line in os.listdir(targetDir):p=re.compile(r'neirong[0-9]{1}') #用正则匹配if p.match(line)!=None:print "需要删除的文件"+s+d+namef+d+line+'!!'os.remove(s+d+namef+d+line)  #匹配成功就删除这个文件,os.remove()中需要完整路径else:print '保留文件!'continue  

有时候会显示连接失败,然后程序报错,应该判断一下  requests.get(url).status_code != 200  不过我加了以后发现运行更慢,每个页面都判断,汗,可能是因为我这里网速几K的原因才会异常

下面是修改后的完善版,慎用,速度极其的慢,判断的东西和次数增加的缘故:

#-*-coding:utf8-*-#下载盗墓笔记小说
#2014-10-14
#ZJLfrom bs4 import BeautifulSoup
import requests
import re
import os#打开网页将所需的URL读取出来放进一个列表中
r = requests.get('http://www.nanpaisanshu.org/').content  #打开要读取的网页
content=BeautifulSoup(r).findAll('a',href=re.compile(r'\Ahttp://www.nanpaisanshu.org/[a-z]+\Z')) #在网页中找到需要的信息sc = str(content) #转换为string类型lists=[]
lists = sc.split(',')
lists = list(set(lists)) #删除列表中重复信息lisy=[]for line in lists:p=line.split('"')[1]  #按 " 分割,取出需要的信息写进数组lisy.append(p)        #这里已经拥有需要的url#print p
#print lisy#把读取到的URL遍历打开,将所有网页保存到html文件中s = os.getcwd()#当前路径d = os.sep  #系统分隔符namef='aaa' #文件加名称#b = os.path.exists( s+d+namef) #判断是存在f=os.path.exists(s+d+namef) #判断是存在if f==False:os.mkdir(s+d+namef)  #如果文件夹不存在就新建一个
else:print u'已经存在'+nameffilenm = s+d+namef+d    #路径i=1
for line in lisy:r = requests.get(line)   #遍历打开所有urlprint r.contentprint '\n'tfile=open(filenm+'neirong'+str(i)+'.html','w')i=i+1tfile.write(r.content) #将网页内容写入文件#将URL文件中的符合要求的URL读取出来写进一个txt文件中
for i in range(1,len(lisy)+1):fp = open(filenm+'neirong'+str(i)+'.html', "r")of = open(filenm+'neirong'+str(i)+'.txt','w')  content = fp.read()   #将文件内容读取p=re.compile(r'http://www\.nanpaisanshu\.org/.*?\.html') #正则匹配#print p.findall(content)#print type(p.findall(content))for line in p.findall(content):  #print line+'\n'#if line !='http://www.nanpaisanshu.org/9701.html':of.write(line+'\n')  #将匹配到的文件写入另一个文件中#else:#continue#of.write(str(p.findall(content)))#关闭文件
of.close()
fp.close()
tfile.close()#将txtfor i in range(1,len(lisy)+1):ot=open(filenm+'neirong'+str(i)+'.txt','r')if os.path.exists(filenm+'quanbu'+str(i)+'.txt')==True:print "已经存在"+filenm+'quanbu'+str(i)+'.txt'+'会先删除再创建'os.remove(filenm+'quanbu'+str(i)+'.txt')outfile=open(filenm+'quanbu'+str(i)+'.txt','a+')   #防止第二次下载时内容在文件后面追加(不知道会不会重新新建文件覆盖掉原来的文件所以这么做)else:print "新建"+filenm+'quanbu'+str(i)+'.txt'outfile=open(filenm+'quanbu'+str(i)+'.txt','a+')li=[]for line in ot:line = line.replace('\n','')li.append(line)   #将url文件中的数据放进列表中li = sorted(li)  #给列表排序for line in li:#print line#line = line.replace('\n','')if requests.get(line).status_code != 200:print '因为网络原因,这个章节为空!'outfile.write('因为网络原因,这个章节为空')   #判断网络连接情况,防止连接失败后程序报错elif requests.get(line).status_code == 200:print '连接成功!'r = requests.get(line).content  #遍历打开所有urltitle=BeautifulSoup(r).find("div",{'class':"post_title"}).h2   #取出标题content=BeautifulSoup(r).findAll("div",{'class':"post_entry"}) #取出内容sti=str(title).replace('<h2>','').replace('</h2>','')  #处理标题,只保留文字#处理内容,只保留文字scon = str(content).replace('<p>','  ').replace('</p>','  ').replace('<br/>','\n')#print str(urllist)scon = re.sub("<.*>", "", scon)scon = re.sub("(.*?);","",scon) #scon = scon.strip()scon = '\n'.join(scon.split())print sconoutfile.write(sti+'\n'+line+'\n'+scon) #将标题,链接,内容写进文件中#i=i+1#print #print urllistprint '=========================下载结束======================='#关闭文件
outfile.close()
ot.close()#取出指定文件夹下的所有文件名
targetDir=s+d+namef
for line in os.listdir(targetDir):p=re.compile(r'neirong[0-9]{1}') #用正则匹配if p.match(line)!=None:print "需要删除的文件"+s+d+namef+d+line+'!!'os.remove(s+d+namef+d+line)  #匹配成功就删除这个文件,os.remove()中需要完整路径else:print '保留文件!'continue  

python 网站爬虫 下载在线盗墓笔记小说到本地的脚本相关推荐

  1. python下载到本地的script_python 站点爬虫 下载在线盗墓笔记小说到本地的脚本

    近期闲着没事想看小说,找到一个全是南派三叔的小说的站点,决定都下载下来看看,于是动手,在非常多QQ群里高手的帮助下(本人正則表達式非常烂.程序复杂的正则都是一些高手指导的),花了三四天写了一个脚本 须 ...

  2. [python]用爬虫下载某站小说并生成epub格式电子书(用mkepub库)

    参考这篇文章 最近沉迷看网络小说,苦于部分网站用手机浏览器看很不方便.不能同步阅读进度,更重要的是在电梯车库等地方手机都没信号,因此准备用爬虫爬下来看. 其实TXT版本的电子书比较好找,但是没有目录什 ...

  3. Python 简单爬虫下载小说txt

    Python 简单爬虫下载小说txt #第一次写爬虫代码 欢迎交流指正 我们范例爬取的对象是笔趣阁的<圣墟> (最近非常火的连载小说) ##为什么选择笔趣阁# 主要是因为笔趣阁的源代码没有 ...

  4. Crawler:利用Beautifulsoup库+find_all方法实现下载在线书架小说《星祖的电影世界》

    Crawler:利用Beautifulsoup库+find_all方法实现下载在线书架小说<星祖的电影世界> 目录 输出结果 核心代码 输出结果 核心代码 # -*- coding: ut ...

  5. python爬虫下载-用Python爬虫下载整本小说

    1 / 写在前面的话 / 如今网络上很多小说网站都有免费的小说阅读,但是它不提供下载全本的服务,目的也是为了获得更多的流量,资源君就不服了,今天刚好看到一个小说网站,就想弄本小说来看看,于是拿起电脑, ...

  6. python 小说爬虫_用Python爬虫下载整本小说

    1 / 写在前面的话 / 如今网络上很多小说网站都有免费的小说阅读,但是它不提供下载全本的服务,目的也是为了获得更多的流量,资源君就不服了,今天刚好看到一个小说网站,就想弄本小说来看看,于是拿起电脑, ...

  7. 用Python爬虫下载整本小说

    1  / 写在前面的话 /  如今网络上很多小说网站都有免费的小说阅读,但是它不提供下载全本的服务,目的也是为了获得更多的流量,资源君就不服了,今天刚好看到一个小说网站,就想弄本小说来看看,于是拿起电 ...

  8. python爬取重名div_第6天 | 10天搞定Python网络爬虫,爬盗墓笔记,牛

    前几天,有老铁留言说能不能VIP小说?-我回复说他是"坏人",因为我觉得他不尊重别人的劳动成果,如果是免费的,我倒可以考虑. 于是,我上网找呀找,搜呀搜,看有没有免费版,而且是大家 ...

  9. 一篇文章教会你使用Python网络爬虫下载酷狗音乐

    [一.项目背景] 现在的听歌软件动不动就是各种付费,要下载软件才能听,当你下载了之后,你会惊奇的发现这首歌还收费,这就让一向喜欢白嫖的小编感到很伤心了.于是,小编冥思苦想,终于让我发现了其中的奥秘,一 ...

最新文章

  1. scala定义抽象类与抽象字段
  2. 谈谈Android重打包--架构
  3. linux服务器文件后缀名,linux服务器备份网站程序并下载到本地(自动)
  4. 用NiceTool在微信浏览器中下载APP
  5. 代码坏味道 - 耦合
  6. TensorFlow2简单入门-单词嵌入向量
  7. 多快好省的目标检测器来了,旷视孙剑团队提出Anchor DETR:基于Anchor Point的DETR
  8. CSS3的chapter3
  9. .NET架构小技巧(5)——反射,架构人员法宝III
  10. 【数据结构与算法】双链表的Java实现
  11. 一起学习C语言:初谈指针(二)
  12. maven pom.xml详解
  13. 【Linux内核之旅】eBPF C语言入门架构
  14. 微软推出免费虚拟太空望远镜软件WWT
  15. C#实现treeview节点上下左右自由移动
  16. python爬取去哪网数据_Python爬虫入门:使用Python爬取网络数据
  17. ios 边录音边放_iOS 录音、音频的拼接剪切以及边录边压缩转码
  18. JAVA SSM毕业设计——基于SSM的校园二手交易平台的设计与实现
  19. 如何快速、有效地管理海量的、分散的数据?佳农靠它实现数智化
  20. 零基础入门数据挖掘-Task3 特征工程

热门文章

  1. linux MQ 比较全面的操作命令
  2. 计算机组成原理cs和we,《计算机组成原理》课程习题答案_秦磊华2011-9-8
  3. 2022年商用密码行业市场规模前景调研分析预测及投资建议可行性研究预测
  4. 免费使用WebService的服务网站
  5. 中国呼叫中心产业投资潜力及运营策略建议报告2021-2027年
  6. uva1626 括号序列
  7. 酷雷曼一站式图片直播,助力品牌高效传播
  8. STM32F103C8T6与ESP8266构建通信(二)
  9. 比尔-盖茨2010年年信:世界首富的幸福观
  10. CANDENCE :如何新建PCB文件、设置PCB画布尺寸、绘制PCB板框