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. Redis总结 C#中如何使用redis

    转载自:https://www.cnblogs.com/zhangweizhong/p/4972348.html 本篇着重讲解.NET中如何使用redis和C#. Redis官网提供了很多开源的C#客 ...

  2. npm全局路径及cache路径设置

    1.网上安装node的教程很多,下载安装包,自定义路径安装即可: 2.安装完成node默认npm已安装,可以通过npm安装其他包.cmd命令分别  node -v    或 npm -v  可以查看安 ...

  3. wannafly 挑战赛9 D 造一造 (卡特兰数)

    链接:https://www.nowcoder.com/acm/contest/71/D 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64b ...

  4. 2018092609-2 选题 Scrum立会报告+燃尽图 04

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8682 一.小组情况组长:贺敬文组员:彭思雨 王志文 位军营 杨萍队名:胜 ...

  5. 云服务器搭建anaconda pytorch torchvision

    (因为在普通用户上安装有些权限问题安装出错,所以我在root用户下相对容易安装,但是anaconda官网说可以直接在普通用户下安装,不过,在root下安装,其他用户也是能用的. 访问Anaconda官 ...

  6. IDEA 创建maven jar、war、 pom项目

    创建java jar.pom项目时创建maven-archetype-quickstart 创建java war项目时创建maven-archetype-webapp

  7. 网络安全监控实战(一):Snort,Wazuh&VT

    https://cloud.tencent.com/developer/news/222711

  8. Php mysql 常用代码、CURD操作以及简单查询

    C/S:Client ServerB/S:Brower Server php主要实现B/S LAMP :Linux系统    A阿帕奇服务器    Mysql数据库   Php语言 mysql常用代码 ...

  9. java JIT

    JVM 即时编译器即时编译器 (Just In Time Compiler) 简称JIT JAVA程序最初是通过解释器 (Interpreter) 进行解释执行的,当 JVM 发现某个方法或代码块运行 ...

  10. sed 删除最后几行 和删除指定行 awk使用

    sed 删除最后几行 和删除指定行   转载原文链接:http://blog.51cto.com/lspgyy/1305489 sed 想删除文件中的指定行,是可以用行号指定也可以用RE来匹配的. 删 ...