失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > pyhton——爬小说网站(顶点最强国防生)

pyhton——爬小说网站(顶点最强国防生)

时间:2020-02-04 10:42:42

相关推荐

pyhton——爬小说网站(顶点最强国防生)

一直想做个爬虫,用.net尝试过。一直在.net平台上转悠。没有尝试过其他语言。因为懂得越来越觉得自己懂得少。最近遇到了瓶颈。就尝试使用别得语言

来扩展自己得思路。希望能突破瓶颈,达到另一个高度把。作为程序员,永远都是说得再多看得再多,不如敲几行代码来的实在。

我是看小说的,应该是老了吧,现在很少的小说符合自己了。我是穷人看的是盗版。(^_^但是我不喷作者,因为我不看正版)言归正传。

1: 首先在python官网上下载python3.X版本。(选择操作系统,选择要下载的版本)。(安装有问题请自行百度)

2: 编辑器,作为.net 死忠。肯定首选Visual studio Code。安装python 插件。新建项目文件 xiaoshuo

3:作为爬下来的东西,要保存到txt文件中(或者别的你可以喜欢的)。所以新建个文件夹FileManager

4: 在FileManager文件夹下新建FileWrite.py 代码如下:

1 def CreatFile(filename):2with open(filename +".txt",'w',encoding='utf-8',errors='ignore') as f:3 f.writelines(" " + filename + " " + '\r\n')4 def appointchapter(filename, context):5with open(filename +".txt",'a',encoding='utf-8',errors='ignore') as f:6 f.writelines(context + '\r\n')

View Code

5:爬下来的东西解析,这里没有使用第三方插件。(本来python 有个很好的html 解析插件,但是公司的网络好像屏蔽掉了,一直下载不下来,所以改成正则。原理应该是相同的)

新建RegularExpression 文件夹,新建Regular.py文件 代码如下:

1 import re 2 # 获取小说名字 3 reName = pile(r'<h1>.+?(?:</h1>)',re.DOTALL) 4 #获取小说章节目录 5 rechapterLi = pile(r'<table.+?(?:</table>)',re.DOTALL) 6 #获取小说单个章节目录 7 rePage = pile(r'<a.+?(?:</a>)',re.MULTILINE) 8 #获取小说单个章节链接 9 rePageUrl = pile(r'[\d]+.+?(?:html)',re.DOTALL)10 #获取小说章节名字11 reTitle = pile(r'<dd><h1>.+?(?:</h1></dd>)',re.DOTALL)12 #获取原始的章节内容13 reContent =pile(r'<dd id="contents".+?(?:</dd>)',re.DOTALL)14 15 def DoHtmlToTxt(htmlstr):16txt = re.sub('&nbsp;',' ',htmlstr)17txt = re.sub('<br />','\r\n',txt)18txt = re.sub(r'<.+?(?:>)','',txt)19return txt20 def DelHtmlCoding(htmlstr):21txt = re.sub(r'<.+?(?:>)','',htmlstr)22txt = re.sub(r'最新.+?(?:列表)','',txt)23txt = re.sub(' ','',txt)24return txt

View Code

6: 新建文件夹WebManager。在WebManager 中新建HttpContext.py 用来管理和处理http请求。代码如下:

1 import urllib 2 import urllib.request 3 def GetHtmlContent(html,endcoding): 4try: 5 request = urllib.request.Request(html) 6 response = urllib.request.urlopen(request) 7 data = response.read() 8 data = data.decode(endcoding) 9 return data10except Exception as e:11 with open('erro.txt','a',encoding='utf-8') as f:12 f.writelines('抓取报错' + html)13 f.writelines('报错原因' + e)14 return '0'15except URLError as e:16 with open('erro.txt','a',encoding='utf-8') as f:17 f.writelines('抓取报错' + html)18 f.writelines('报错原因' + e)19 return '0'20

View Code

7: 好了准备工作好了,现在在xiaoshuo 文件夹下,新建Main.py。代码如下:

1 import RegularExpression.Regular 2 import FileManager.FileWrite 3 import WebManager.HttpContext 4 #htmlurl = '/html/69/69720/' 5 htmlurl = '/html/173/173244/' 6 htmltxt = WebManager.HttpContext.GetHtmlContent(htmlurl,'gbk') 7 if htmltxt != '0': 8titlehtml = RegularExpression.Regular.reName.search(htmltxt).group() 9title = RegularExpression.Regular.DelHtmlCoding(titlehtml)10FileManager.FileWrite.CreatFile(title)11chaptercontent = RegularExpression.Regular.rechapterLi.search(htmltxt).group()12if chaptercontent:13 chapterli = RegularExpression.Regular.rePage.finditer(chaptercontent)14 if chapterli:15 for m in chapterli:16 pageurl = RegularExpression.Regular.rePageUrl.search(m.group()).group()17 htmlpagetxt = WebManager.HttpContext.GetHtmlContent(htmlurl + pageurl,'gbk')18 if htmlpagetxt != '0':19 pageName = RegularExpression.Regular.reTitle.search(htmlpagetxt).group()20 pageContent = RegularExpression.Regular.reContent.search(htmlpagetxt).group()21 pageName = RegularExpression.Regular.DelHtmlCoding(pageName)22 pageContent = RegularExpression.Regular.DoHtmlToTxt(pageContent)23 txt = '\r\n'+ pageName +'\r\n' + pageContent24 FileManager.FileWrite.appointchapter(title,txt)25 else:26 continue27 print('下载成功!')

View Code

备注: 由于只是尝试,所以有很多可以扩展的地方。大家多多包涵

如果觉得《pyhton——爬小说网站(顶点最强国防生)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。