TXT 文件?? (笑

这里爬的是 74xsw (咱好像也不怎么逛的网站)的英雄再临 ...

请注意这并不是教程,只是贴个代码仅供参考而已【雾

这里 用的 getTXT 的方式有两种,一种是每个章节分开 save ,另一种就是所有章节存进一个 TXT (然后你打开的时候可能会发现 notepad 炸掉了,虽说 notepad++ 貌似就不会有这个问题)

如果提示 Reloading 什么的话 ,呵呵,应该是这个网站又挂了(莫不是很多人拿这个网站爬虫练手???艹) ,是这个网站服务器不够强大,并不是你的问题(当然是你的问题也说不准)

不过 Reloading 最多 十来次就完事儿了吧...否则可能出了大问题 (请找出这句话的语病【雾)

另外如果说 你把代码关掉重开了的话他是会重头再存的(因为博主并没有考虑如何解决断线重连的问题,可能想到了然鹅懒得去搞,毕竟手调也挺快了 【滑稽】)

对于单个文件的存储这影响不大,毕竟就是浪费点时间,对于总文件存储的话,由于存储机制是每次向文档末尾 append 一个章节的内容,所以会有章节重复之类的大雾

所以说你可以删了文件重搞??? 或者说把代码里面的 Cnt>0 换换(换成 Cnt>x , x 为上一次存储的文档),这样就可以顺利解决这个问题辣

如果你觉得自己爬这个网站烧服务器良心有愧【雾】,可以在每次爬完一章之后 sleep 一下(咱一开始是这么弄的...)

顺便提一句,有些网站会搞些什么反爬装置,可能就是看你同一个 ip 的访问频率很机器(咳咳),就会给你 forbidden 之类的,这种情况你也可以用 sleep 一个随机的时间来解决...吧

貌似还有一个模拟火狐浏览器,google 浏览器访问网站之类的方法,可以逃过一些反爬识别的方法,但是咱没有弄【懒

Code



import os
import re
import urllib
import urllib.request
import ssl
import time # -- coding: utf-8 -- def getHtmlCode(Url):
html=urllib.request.urlopen(Url).read()
html=html.decode("gbk") reg=r'<li class="chapter"><a href="(.*?)">(.*?)</a></li>'
reg=re.compile(reg)
urls=re.findall(reg, html)
return urls def make_dir(floder): #create a path
path='F:\\PY\\'+floder+'\\'
if not os.path.isdir(path):
os.makedirs(path)
return path ############################### For single save ####################################### class SingleSave(object):
pass def saveTXT(self, url, title):
chapter_html=urllib.request.urlopen(url).read()
chapter_html=chapter_html.decode('gbk','ignore')
chapter_reg = r'&nbsp;&nbsp;&nbsp;&nbsp;(.*?)(<br />|&lt;/p&gt;</div>)'
chapter_reg=re.compile(chapter_reg, re.S)
chapter_content=re.findall(chapter_reg, chapter_html)
path=make_dir('TXT')
f=open('{}{}.txt'.format(path,title), 'w', encoding='gbk')
for content in chapter_content:
want=content[0]
want=want.replace("&nbsp;&nbsp;&nbsp;&nbsp;","")
want=want.replace("&nbsp;&nbsp;","\r\n ")
want=' '+want+'\r\n'
#print(want)
f.write(want)
f.close()
return 'Saved Complete' def stableSaveTXT(self, url, title):
try:
assert saveTXT(url,title)=='Saved Complete'
except:
print('Something goes wrong. Reloading... Please wait a moment')
stableSaveTXT(url,title) def getTXT(self, urls, Pre):
Cnt=1
print('Start downloading...')
for url in urls:
#print(url)
if Cnt>0:
chapter_url=url[0]
chapter_title=url[1]
stableSaveTXT(Pre+chapter_url, str(Cnt)+'-'+chapter_title)
print("The "+str(Cnt)+'th TXT is downloaded!')
time.sleep(0.5)
Cnt=Cnt+1 #################################### For total save ###################################### class TotSave(object):
pass def TOTsaveTXT(self, url, title):
chapter_html=urllib.request.urlopen(url).read()
chapter_html=chapter_html.decode('gbk','ignore')
chapter_reg = r'&nbsp;&nbsp;&nbsp;&nbsp;(.*?)(<br />|&lt;/p&gt;</div>)'
chapter_reg=re.compile(chapter_reg, re.S)
chapter_content=re.findall(chapter_reg, chapter_html)
path=make_dir('TXT')
f=open('{}{}.txt'.format(path,'0-TOT'), 'a',encoding='gbk')
f.write("\r\n"+title+"\r\n")
for content in chapter_content:
want=content[0]
want=want.replace("&nbsp;&nbsp;&nbsp;&nbsp;","")
want=want.replace("&nbsp;&nbsp;","\r\n ")
want=' '+want+'\r\n'
#print(want)
f.write(want)
f.close()
return 'Saved Complete' def TOTstableSaveTXT(self, url, title):
try:
assert TOTsaveTXT(url,title)=='Saved Complete'
except:
print('Something goes wrong. Reloading... Please wait a moment')
TOTstableSaveTXT(url,title) def TOTgetTXT(self, urls, Pre):
Cnt=1
print('Start downloading...')
for url in urls:
#print(url)
if Cnt>0:
chapter_url=url[0]
chapter_title=url[1]
TOTstableSaveTXT(Pre+chapter_url, str(Cnt)+'-'+chapter_title)
print("The "+str(Cnt)+'th TXT is downloaded!')
time.sleep(0.5)
Cnt=Cnt+1
print('Download Completely!') ############################################################################### if __name__=='__main__':
urllist=getHtmlCode('https://www.74xsw.com/9_9353/')
print('Got the urllist!')
TotSave().TOTgetTXT(urllist,'https://www.74xsw.com/')
print('All Done.\n')

优雅的用两种方式爬网络 txt 文件【雾的更多相关文章

  1. 《连载 | 物联网框架ServerSuperIO教程》- 10.持续传输大块数据流的两种方式(如:文件)

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  2. (转)DLL中导出函数的两种方式(dllexport与.def文件)

    DLL中导出函数的两种方式(dllexport与.def文件)http://www.cnblogs.com/enterBeijingThreetimes/archive/2010/08/04/1792 ...

  3. 【转】DLL中导出函数的两种方式(dllexport与.def文件)

    DLL中导出函数的两种方式(dllexport与.def文件) DLL中导出函数的声明有两种方式: 一种方式是:在函数声明中加上__declspec(dllexport):另外一种方式是:采用模块定义 ...

  4. DLL中导出函数的两种方式(dllexport与.def文件)

    DLL中导出函数的声明有两种方式: 一种方式是:在函数声明中加上__declspec(dllexport): 另外一种方式是:采用模块定义(.def)文件声明,(.def)文件为链接器提供了有关被链接 ...

  5. 这里介绍两种将矩阵写入TXT文件的方法。

    方法1 fid = fopen('data.txt','wt'); % data.txt为写入文件名 matrix = M; % M为要存储的矩阵 [m,n]=size(matrix); for i= ...

  6. [Swift]Alamofire:设置网络请求超时时间【timeout】的两种方式

    两种方式作用相同,是同一套代码的两种表述. 第一种方式:集聚. 直接设置成员属性(全局属性),这种方法不能灵活修改网络请求超时时间timeout. 声明为成员属性: // MARK: - 设置为全局变 ...

  7. WebView加载页面的两种方式——网络页面和本地页面

    WebView加载页面的两种方式 一.加载网络页面 加载网络页面,是最简单的一种方式,只需要传入http的URL就可以,实现WebView加载网络页面 代码如下图: 二.加载本地页面 1.加载asse ...

  8. 解决 SharePoint 2010 拒绝访问爬网内容源错误的小技巧(禁用环回请求的两种方式)

    这里有一条解决在SharePoint 2010搜索爬网时遇到的“拒绝访问错误”的小技巧. 首先要检查默认内容访问帐户是否具有相应的访问权限,或者添加一条相应的爬网规则.如果目标资源库是一个ShareP ...

  9. iOS 通过URL网络获取XML数据的两种方式

    转载于:http://blog.csdn.net/crayondeng/article/details/8738768 下面简单介绍如何通过url获取xml的两种方式. 第一种方式相对简单,使用NSD ...

随机推荐

  1. sh_03_列表的数据统计

    sh_03_列表的数据统计 name_list = ["张三", "李四", "王五", "王小二", "张三 ...

  2. apache的httpclient进行http的交互处理

    使用apache的httpclient进行http的交互处理已经很长时间了,而httpclient实例则使用了http连接池,想必大家也没有关心过连接池的管理.事实上,通过分析httpclient源码 ...

  3. localhost与127.0.0.1的区别是什么?

    localhost与127.0.0.1的区别是什么?都代表本地服务器 相信有人会说是本地ip,曾有人说,用127.0.0.1比localhost好,可以减少一次解析. 看来这个问题还有人不清楚,其实这 ...

  4. GC详解

    GC,即就是Java垃圾回收机制.目前主流的JVM(HotSpot)采用的是分代收集算法.与C++不同的是,Java采用的是类似于树形结构的可达性分析法来判断对象是否还存在引用.即:从gcroot开始 ...

  5. MongoDB中的_id和ObjectId

    ObjectId是"_id"的默认类型.它设计成轻量型的,不同的机器都能用全局唯一的同种方法方便地生成它. 这是MongoDB采用ObjectId,而不是其他比较常规的做法(比如自 ...

  6. XMLHttpRequest 对象属性参数参考

    readyState:提供当前 HTML 的就绪状态. readyState可能返回的值: 0:请求未初始化(还没有调用 open()). 1:请求已经建立,但是还没有发送(还没有调用 send()) ...

  7. 如何下载github项目中的某一部分

    如何下载github项目中的某一部分 一.总结 一句话总结: 通过 DownGit 下载:原地址失败的话直接百度DownGit,一大堆可用的 通过 Chrome 插件 GitZip 进行下载(推荐) ...

  8. spark streaming 2: DStream

    DStream是类似于RDD概念,是对数据的抽象封装.它是一序列的RDD,事实上,它大部分的操作都是对RDD支持的操作的封装,不同的是,每次DStream都要遍历它内部所有的RDD执行这些操作.它可以 ...

  9. 查询一个redis集群的大keys 脚本

    1. 把redis集群中的 master 节点信息记录在文件 redis_object_port.info 中, 方便下一步遍历各实例中的大 keys redis-cli -h 10.240.47.1 ...

  10. windows怎么远程访问deepin linux桌面

    deepin linux端安装anydesk 1.首先点击打开任务栏上的“深度商店” 2.打开后搜索anydesk. 3.点击进入后按“安装”即可,安装完成即可在“深度商店”点击“打开”运行anyde ...