23hh小说网——爬虫python
1 #! /bin/python 2 # -*- coding:utf-8 -*- 3 4 # -------------------------------------------- 5 # 程序:【23hh小说网】爬虫 6 # 版本:0.2 7 # 作者:Silence 8 # 日期:2014-04-01 9 # 操作:输入quit 10 # 功能:提供一个目录页,把这个小说的全部章节都抓取下来 11 # --------------------------------------------- 12 import urllib2 13 import re 14 import os 15 16 class Novel_Tool: 17 18 def __init__(self,weburl): 19 self.url = weburl 20 self.headers = { 21 'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6' 22 } 23 24 self.pagesInfo = {} 25 26 #获取当前页面的编码格式,现在某些小说网喜欢用gbk来编码 27 # 但是,也有一些不厚道的网站,他们的实际编码格式不是在页面中charset中定义的格式,暂时先忽略了 28 def getPageType(self,content): 29 pattern = re.compile('charset=.*?"') 30 pagetype = pattern.search(content).group() 31 pagetype = pagetype[8:len(pagetype) - 1] 32 return pagetype 33 34 def start(self): 35 # 得到utf-8编码的小说返回文本 36 req = urllib2.Request( 37 url = self.url, 38 headers = self.headers 39 ) 40 myResponse = urllib2.urlopen(req).read() 41 # print myResponse 42 decodeResp = myResponse.decode(self.getPageType(myResponse)).encode('utf-8') 43 44 pagesInfo = self.getAllUrlsAndNames(decodeResp) 45 # index = 1 46 for index,pageInfo in pagesInfo.items(): 47 # print page 48 print '正在爬第%d个页面……'%index 49 req = urllib2.Request( 50 url = pageInfo['pageurl'], 51 headers = self.headers 52 ) 53 print pageInfo['pageurl'] 54 pageResponse = urllib2.urlopen(req).read() 55 decodePageResp = pageResponse.decode(self.getPageType(pageResponse)).encode('utf-8') 56 pageContent = self.getPageContent(decodePageResp) 57 self.writeToFile(pageContent,pageInfo['pagename']) 58 59 def writeToFile(self,content,filename): 60 if os.path.exists(os.getcwd() + '/Nodels'): 61 if not os.path.isdir(os.getcwd() + '/Nodels'): 62 os.rename('Nodels','Nodels.bak') 63 os.mkdir(os.getcwd() + '/Nodels') 64 else: 65 os.mkdir(os.getcwd() + '/Nodels') 66 67 ofile = open(os.getcwd() + '/Nodels/' + filename,'w') 68 print os.getcwd() + '/Nodels/' + filename 69 try: 70 ofile.write(content) 71 except Exception, e: 72 print '存储网页',filename,'出错!' 73 finally: 74 ofile.close() 75 76 def getPageContent(self,content): 77 contentPattern = re.compile('(<dd id="contents">)((.|\s)*?)(</dd>)') 78 content = contentPattern.search(content).group(2) 79 content = self.replaceWebTag(content) 80 return content 81 82 # 获取下一页的地址 83 def getNextPage(self,content): 84 # 先获取到下一页的位置 85 footlinkRex = re.compile('(footlink">)(.*?)</dd>') 86 foot = footlinkRex.search(content).group(2) 87 pattern = re.compile(r'(返回目录.*?(<a.*?">下一页))') 88 m = pattern.search(foot).groups() 89 nextUrl = m[len(m)-1][9:m[len(m)-1].find('">')] 90 91 return self.url[0:self.url.rfind('/')+1] + nextUrl 92 93 def getAllUrlsAndNames(self,content): 94 print '正在分析目录页面,请稍后…………' 95 pageRex = re.compile('<a href=".*?</td>') #定义获取所有章节页面链接的正则 96 pageUrlRex = re.compile('".*?"') #获取章节url的正则 97 pageNameRex = re.compile('>.*?<') #获取章节名字的正则 98 99 pages = pageRex.findall(content) 100 index = 1 101 for page in pages: 102 pageurl = pageUrlRex.search(page).group() 103 pageurl = pageurl[1:len(pageurl) - 1] 104 pageurl = self.url + pageurl 105 106 pagename = pageNameRex.search(page).group() 107 pagename = pagename[1:len(pagename) - 1] 108 109 # print pagename + ' ' + pageurl 110 self.pagesInfo[index] = { 111 'pagename' : pagename, 112 'pageurl' : pageurl 113 } 114 index = index + 1 115 print '目录页分析完成!该小说共有%d个章节'%index 116 return self.pagesInfo 117 118 119 def getNovelName(self,content): 120 titleRex = re.compile('<h1>.*?</h1>') 121 title = titleRex.search(content).group() 122 return title[4:len(title) - 5] 123 124 def replaceWebTag(self,content): 125 charToNoneRex = re.compile(r' ') 126 charToNewLineRex = re.compile("<br />|<br>|<br/>") 127 128 content = charToNoneRex.sub("",content) 129 content = charToNewLineRex.sub("\n",content) 130 return content 131 132 if __name__ == '__main__': 133 print u""" 134 # -------------------------------------------- 135 # 程序:【23hh小说网】爬虫 136 # 版本:0.2 137 # 作者:Silence 138 # 日期:2014-04-01 139 # 操作:启动后输入要爬得小说目录页地址,就可以自动爬了 140 # 功能:提供一个目录页,把目录页中所有的目录章节都抓出来(默认是:23hh的争霸天下), 141 # 分章节保存在启动脚本目录下的Novels目录下;如果该目录下已经有一个Novels,则把这个Novels改名为Novels.bak 142 # ---------------------------------------------""" 143 144 myinput = raw_input('请输入要爬的小说目录页面地址(默认是:23hh的争霸天下)\n') 145 if myinput == '': 146 myinput = 'http://www.23hh.com/book/43/43957/' 147 nodel = Novel_Tool(myinput) 148 nodel.start()
周末自己看小说,发现现在的网页上,一次请求回来的东西有很多无用的js和广告,速度也非常非常的慢;
于是自己就弄了这个一个爬虫,把所有小说章节从网页上爬下来。
看小说到我这种程度,算是苦逼了
转载于:https://www.cnblogs.com/SilenceCity/p/3640395.html
23hh小说网——爬虫python相关推荐
- 23hh小说网——爬虫1.0python
修改点: 1. decode('gbk')修改为decode('gbk','replace'),在遇到不能识别的字符时直接用?替换 2. 将原来的单线程变为多线程,现在处理速度快了好多 1 #! /b ...
- python 小说cms系统_「博文小说网」Python爬虫爬取小说网站 - seo实验室
博文小说网 #!/usr/bin/env Python # -*- coding: utf-8 -*- # @Author : Woolei # @File : book136_singleproce ...
- python爬虫17K小说网资料
python爬虫17K小说网资料 爬虫作业要求:抓取小说网站为例,必须抓取一系列小说(不是一部小说)的篇名.作者.出版单位(或首发网站).出版时间(或网上发布时间).内容简介.小说封面图画.价格.读者 ...
- Python爬虫期末作业 | 爬取起点小说网作者和书名,并以Excel形式存储
使用Python爬虫技术爬取起点小说网作者及书名,并且以xlsx形式保存 前言 随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容. 一. ...
- python爬虫三大解析数据方法:bs4 及爬小说网案例
bs4 python独有可以将html文档转成bs对象,可以直接调用bs对象的属性进行解析 安装 pip install bs4 本地html Beautiful("open('路径')&q ...
- python爬虫简单实例-爬取17K小说网小说
什么是网络爬虫? 网络爬虫(Web Spider),又被称为网页蜘蛛,是一种按照一定的规则,自动地抓取网站信息的程序或者脚本. 爬虫流程 先由urllib的request打开Url得到网页html文档 ...
- python爬上去飞卢_pyhon3爬虫爬取飞卢小说网小说
想看小说,不想看花里胡哨的网页,想着爬下来存个txt,顺便练习一下爬虫. 随便先找了个看起来格式比较好的小说网站<飞卢小说网>做练习样本,顺便记录一下练习成果. ps:未登录,不能爬取VI ...
- python爬虫(16)使用scrapy框架爬取顶点小说网
本文以scrapy 框架来爬取整个顶点小说网的小说 1.scrapy的安装 这个安装教程,网上有很多的例子,这里就不在赘述了 2.关于scrapy scrapy框架 是一个非常好的东西,能够实现异步爬 ...
- Python爬虫,爬取百度小说网评论
#网址如下 #https://yuedu.baidu.com/ebook/0ab2967333687e21ae45a937###import requests import time import x ...
最新文章
- Android 虚线实现绘制 - DashPathEffect
- 解决Windows与虚拟机ubuntu之间相互直接拖动文件
- jQuery元素过滤
- JavaScript实现binarySearch二分查找算法(附完整源码)
- Nginx安装及配置简介
- [tf] tf.gradients vs optimizer.compute_gradients
- Android 十年,Google 用 AI 为它画了个句号
- word加水印铺满java,Word 2010文档中让水印铺满整个页面的设置方法
- 设计模式之笔记--建造者模式(Builder)
- 西安交大王之坤摘得金奖桂冠,浙大团体第一,1016名高手同台竞技CCSP2020
- 实用小技能 | 用 Word 和 Excel 自制一个题库自判断答题系统!
- 微信支付 签名错误 uniapp
- 【GNN报告】复旦大学许嘉蓉:基于图数据的鲁棒机器学习
- FX5u plc 如何实现网络远程通讯
- iPhone X搭载3D感测功能,VCSEL是个什么鬼?
- Cadence通孔焊盘制作
- 关于举办“2021全国高校计算机视觉实战暑期教师研修班”的通知
- 机器学习:使用scikit-learn的线性回归预测Google股票
- UG NX 12 鼠标操作
- 普通人的2022春招总结(阿里、腾讯offer)