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. wx.setStorage、wx.getStorage和wx.getStorageSync

    Page({ data: { testnum:""//设置测试参数 }, test:function(){ var Num = this.data.testnum; wx.setS ...

  2. JavaWeb_(request和response)用户登录注册模板_基础版

    用户登录注册模板进阶版 传送门 用户登录注册模板基础版 登录:当用户登录成功时,跳转到personCenter.jsp,当用户登录失败时,跳转到login.jsp并给出提示 注册:当用户注册成功时,跳 ...

  3. sqli-labs(5)

    双查询注入 0x01爱之初了解 在第一次接触到双查询注入时 肯定会有很多问题 在这里我们先了解一下什么叫做 双查询注入 他的语法结构 以及为什么这样构造 答:在此之前,我们理解一下子查询,查询的关键字 ...

  4. Java线程细节

    启动一个线程是用  run() 还是 start()?启动一个线程是调用 start()方法,启动线程并调用 run 方法 线程的基本概念.线程的基本状态以及状态之间的关系线程是进程内的并发,没有自已 ...

  5. windows环境安装nexus

    1.下载安装nexus安装包,我用的是nexus-2.14.13-01版本 2. 以管理员身份打开cmd命令窗口 3.进入到nexus bin目录下 输入命令 nexus install 4. 启动 ...

  6. matlab7与win7不兼容

    移动鼠标到其打开图标,右键打开属性,选择兼容性,勾选"以兼容模式运行程序",选择Windows Vista

  7. webshell 常见 Bypass waf 技巧总结

    在渗透学习的过程中,总会遇到各种情况,例如 php 大马被 waf 拦截的时候,那么如何制作免杀 php webshell 呢,接下来就由我带各位小伙伴们一起踏上大马免杀之路,不喜勿喷. 一篇好的文章 ...

  8. 配置Toad链接远程Oracle数据库

    当前环境: 本机系统:Win7 64位 Toad版本:11 32位 数据库:Oracle 10g =================================== 与PLSQL Develope ...

  9. Responsive web design 学习笔记

    Advanced Styling with Responsive Design 此笔记为Coursera同名课程笔记. Week1 什么是响应式设计? 响应式设计: It is designing y ...

  10. java:struts框架5(Converter,Validation,Tags(Object-Graph Navigation Language))

    1.Converter: struts.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTY ...