批量下载小说网站上的小说(python爬虫)
随便说点什么
因为在学python,所有自然而然的就掉进了爬虫这个坑里,好吧,主要是因为我觉得爬虫比较酷,才入坑的。
想想看,你可以批量自动的采集互联网上海量的资料数据,是多么令人激动啊!
所以我就被这块大蛋糕吸引过来了 :)
想学爬虫自然要去找学习资料了,不过网上有很多,我找了不少,个人觉得崔庆才的爬虫教程写得不错。起码对我来说,入门是够了。
感兴趣的朋友可以点进链接看看:Python爬虫学习系列教程 <==这位兄台博客做得也很好
掌握了基本的爬虫知识,主要是urllib,urlib2,re 这些库,以及Request(),urlopen()的基本用法之后,我就开始寻找爬取目标。
正好女朋友的哥哥让她帮忙下载小说,找我推荐几本,我一时也不知道他哥喜欢什么类型的,心想干脆找个小说网批量下载一些小说。
于是说干就干,用了一个中午时间写了一个粗糙的爬虫脚本,启动发现可以运行,让脚本在这儿跑着,我回去躺在床上呼呼大睡。
起来之后发现脚本遇到错误,停掉了,于是debug,干掉bug之后跑起来陆续又发现几个错误,于是干脆在一些容易出错的地方,例如urlopen()请求服务器的地方,本地write()写入的地方(是的,这也会有超时错误!)加入了try-except捕获错误进行处理,另外加入了socket.timeout网络超时限制,修修补补之后总算可以顺畅的运行。
如此,运行了两天,爬虫脚本把这个小说网上的几乎所有小说都下载到了本地,一共27000+本小说,一共40G。
自此,大功告成,打包发了过去。另外说一句,百度云真坑,每次上传数量有限制,分享给朋友文件数量有限制,分享的文件夹大小也有限制,害的我还得整成压缩版才能分享。
下载界面
下面附上代码
1 #coding=utf-8 2 import urllib 3 import urllib2 4 import re 5 import os 6 7 webroot = 'http://www.xuanshu.com' 8 9 for page in range(20,220): 10 print '正在下载第'+str(page)+'页小说' 11 12 url = 'http://www.xuanshu.com/soft/sort02/index_'+str(page)+'.html' 13 headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6' } 14 try: 15 request = urllib2.Request(url,headers=headers) 16 response = urllib2.urlopen(request,timeout=180) 17 #print response.read() 18 except urllib2.URLError, e: 19 if hasattr(e,"code"): 20 print e.code 21 if hasattr(e,"reason"): 22 print e.reason 23 24 html = response.read().decode('utf-8') 25 #print html 26 pattern = re.compile(u'<li>.*?<div class="s">.*?target="_blank">(.*?)</a><br />大小:(.*?)<br>.*?</em><br>更新:(.*?)</div>.*?<a href="(.*?)"><img.*?>(.*?)</a>.*?<div class="u">(.*?)</div>',re.S) 27 items = re.findall(pattern,html) 28 #print items 29 30 for item in items: 31 try: 32 book_auther = item[0].encode('gbk') 33 book_size = item[1].encode('gbk') 34 book_updatetime = item[2].encode('gbk') 35 book_link = item[3].encode('gbk') 36 book_name = item[4].encode('gbk') 37 book_note = item[5].encode('gbk') 38 39 book_full_link = webroot + book_link # 构建书的绝对地址 40 41 #请求地址 42 try: 43 request = urllib2.Request(book_full_link,headers=headers) 44 response = urllib2.urlopen(request,timeout=180) 45 except urllib2.URLError, e: 46 if hasattr(e,"code"): 47 print e.code 48 if hasattr(e,"reason"): 49 print e.reason 50 html = response.read().decode('utf-8') 51 #print html 52 pattern = re.compile('<a class="downButton.*?<a class="downButton" href=\'(.*?)\'.*?Txt.*?</a>',re.S) 53 down_link = re.findall(pattern,html) 54 print book_name 55 print down_link 56 57 # down txt 58 try: 59 request = urllib2.Request(down_link[0].encode('utf-8'),headers=headers) 60 response = urllib2.urlopen(request,timeout=180) 61 except urllib2.URLError, e: 62 if hasattr(e,"code"): 63 print e.code 64 if hasattr(e,"reason"): 65 print e.reason 66 try: 67 fp = open(book_name+'.txt','w') 68 except IOError,e: 69 pattern = re.compile('<strong>.*?>(.*?)<.*?</strong>',re.S) 70 book_name = re.findall(pattern,book_name) 71 fp = open(book_name[0]+'.txt','w') 72 print 'start download' 73 fp.write(response.read()) 74 print 'down finish\n' 75 fp.close() 76 except Exception,e: 77 print '该条目解析出现错误,忽略' 78 print e 79 print '' 80 fp = open('error.log','a') 81 fp.write('page:'+str(page)+'\n') 82 fp.write(item[4].encode('gbk')) 83 #fp.write(e) 84 fp.write('\nThere is an error in parsing process.\n\n') 85 fp.close() 86 87
注意
该脚本只定向抓取“选书网”小说站,“玄幻奇幻”分类下的小说。供网友们参考,可自行修改。
写得比较粗糙,勿喷……
Freecode# : www.cnblogs.com/yym2013
批量下载小说网站上的小说(python爬虫)相关推荐
- 如何批量下载一些网站上的压缩包或者图片
因为项目需要,我们需要从网上下载很多图片来做为数据集测试项目,经过一些研究,实现了批量下载ImageNet上的图片的程序在这里分享一个批量下载ImageNet图片的经验,其实这个例子适用于很多你知道下 ...
- 爬取笔趣阁小说网站上的所有小说(二)
爬取笔趣阁小说网站上的所有小说(二) 网址为:https://www.biqukan.cc/topallvisit/1.html 我们已经拿到了所有小说的地址爬取笔趣阁小说网站上的所有小说(一),现在 ...
- qu.la网站上的小说爬取
qu.la网站上的小说爬取 ##这个项目是我最早开始写的爬虫项目,代码比较简陋 在写这个项目时,我还不会Python的协程编程,用协程可提升爬虫速度至少5倍,参考我的文章[线程,协程对比和Python ...
- 爬取笔趣阁小说网站上的所有小说(一)
爬取笔趣阁小说网站上的所有小说(一) 网址为:https://www.biqukan.cc/topallvisit/1.html 反反爬虫 爬虫首先要做的就是看看目标网址有没有反爬虫手段,一般网站都是 ...
- 使用Python+Chrome浏览器批量下载Ocean Color上遥感数据
目录 1.前言 2.主要思路及代码 3.结果展示 建了一个QQ群,大家可以在里边聊聊水色遥感数据下载和数据处理方面的事情:1087024529 1.前言 最近遇见一个很尴尬的事情.之前写过用IDM批量 ...
- 爬取小说网站章节和小说语音播放
爬取小说网站章节和小说语音播放(文章末-->获取源码) 爬去小说网站说干就干!! 现在来了,撸起袖子开始就是干!! 百度搜索一下 "小说网站" ,好第一行就你了,目标--& ...
- 如何高速下载国外网站上的数据集
如何高速下载国外网站上的数据集 做机器学习经常用到训练数据集,但是国内的数据集寥寥无几,很多时候要用到国外的数据集,但是下载过的人都懂,在国内下载国外数据集的时候,那网速慢的想打人,一个G的资料动不动 ...
- 使用MATLAB中Mget函数批量下载FTP网站数据
使用MATLAB中Mget函数批量下载FTP网站数据 例如下载igs的GNSS数据 一.使用excel批量编写代码内容 二.粘贴至MATLAB脚本中并运行 例如下载igs的GNSS数据 一.使用exc ...
- Python使用you-get批量下载bilibili网站视频
需要安装python,然后pip install you-get. 安装步骤在官方说明上很清楚,就不写了. 使用 you-get --playlist -o F:\bilibili https:// ...
最新文章
- Drupal的介绍----第一章:Drupal的介绍
- 同步(Synchronization)和异步(Asynchronous)
- 防火墙和路由器的滑铁卢:NAT Slipstreaming攻击
- MVVM中数据验证之 ViewModel vs. Model
- Spring加载Properties配置文件,java通过注解读取数据
- Ubuntu-显卡驱动-nvidia-smi报错:couldn‘t communicate with the NVIDIA driver
- Python 集合 day3
- 私生子与假婊子——谈中国手机JAVA游戏
- 河北省应用计算机模拟考试,河北省职称计算机考试模拟系统
- Alize和NIST中sphere2.7编译问题
- linux下批量查找文件内容
- Codeforces Round 701 Multiples and Power Differences
- cocos2d-js 接入anysdk
- 如何将图片调整为固定大小?怎么自定义压缩图片大小?
- 配置运营商光猫做交换机拓展网络
- dhtmlxgrid导出的js_dhtmlx之dhtmlXGrid显示数据
- Codeforces Round #616 (Div. 2)B. Array Sharpening
- 不等式$\sum x_i^3(1-x_i)\leq\frac{1}{8}$
- Python .pyc的编译和反编译
- 解决报错dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.62.dylib
热门文章
- iis mysql版本切换_MySQL+PHP配置 Windows系统IIS版(转)
- Unity 2017 Game Optimization 读书笔记 Dynamic Graphics (5) Shader优化
- c语言某一行不被优化,C语言优化小技巧
- carsim输出端口2的宽度无效_PIO CORE 解析 (2)
- UFLDL教程:Exercise:Convolution and Pooling
- livebos--iframe使用
- 【转】小白级的CocoaPods安装和使用教程
- linux命令详解——iostat
- 解决:缺少aclocal、autoconf、automake
- dbgrideh的功能