随便说点什么

  因为在学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爬虫)相关推荐

  1. 如何批量下载一些网站上的压缩包或者图片

    因为项目需要,我们需要从网上下载很多图片来做为数据集测试项目,经过一些研究,实现了批量下载ImageNet上的图片的程序在这里分享一个批量下载ImageNet图片的经验,其实这个例子适用于很多你知道下 ...

  2. 爬取笔趣阁小说网站上的所有小说(二)

    爬取笔趣阁小说网站上的所有小说(二) 网址为:https://www.biqukan.cc/topallvisit/1.html 我们已经拿到了所有小说的地址爬取笔趣阁小说网站上的所有小说(一),现在 ...

  3. qu.la网站上的小说爬取

    qu.la网站上的小说爬取 ##这个项目是我最早开始写的爬虫项目,代码比较简陋 在写这个项目时,我还不会Python的协程编程,用协程可提升爬虫速度至少5倍,参考我的文章[线程,协程对比和Python ...

  4. 爬取笔趣阁小说网站上的所有小说(一)

    爬取笔趣阁小说网站上的所有小说(一) 网址为:https://www.biqukan.cc/topallvisit/1.html 反反爬虫 爬虫首先要做的就是看看目标网址有没有反爬虫手段,一般网站都是 ...

  5. 使用Python+Chrome浏览器批量下载Ocean Color上遥感数据

    目录 1.前言 2.主要思路及代码 3.结果展示 建了一个QQ群,大家可以在里边聊聊水色遥感数据下载和数据处理方面的事情:1087024529 1.前言 最近遇见一个很尴尬的事情.之前写过用IDM批量 ...

  6. 爬取小说网站章节和小说语音播放

    爬取小说网站章节和小说语音播放(文章末-->获取源码)  爬去小说网站说干就干!! 现在来了,撸起袖子开始就是干!! 百度搜索一下 "小说网站" ,好第一行就你了,目标--& ...

  7. 如何高速下载国外网站上的数据集

    如何高速下载国外网站上的数据集 做机器学习经常用到训练数据集,但是国内的数据集寥寥无几,很多时候要用到国外的数据集,但是下载过的人都懂,在国内下载国外数据集的时候,那网速慢的想打人,一个G的资料动不动 ...

  8. 使用MATLAB中Mget函数批量下载FTP网站数据

    使用MATLAB中Mget函数批量下载FTP网站数据 例如下载igs的GNSS数据 一.使用excel批量编写代码内容 二.粘贴至MATLAB脚本中并运行 例如下载igs的GNSS数据 一.使用exc ...

  9. Python使用you-get批量下载bilibili网站视频

    需要安装python,然后pip install you-get. 安装步骤在官方说明上很清楚,就不写了. 使用 you-get --playlist  -o F:\bilibili https:// ...

最新文章

  1. Drupal的介绍----第一章:Drupal的介绍
  2. 同步(Synchronization)和异步(Asynchronous)
  3. 防火墙和路由器的滑铁卢:NAT Slipstreaming攻击
  4. MVVM中数据验证之 ViewModel vs. Model
  5. Spring加载Properties配置文件,java通过注解读取数据
  6. Ubuntu-显卡驱动-nvidia-smi报错:couldn‘t communicate with the NVIDIA driver
  7. Python 集合 day3
  8. 私生子与假婊子——谈中国手机JAVA游戏
  9. 河北省应用计算机模拟考试,河北省职称计算机考试模拟系统
  10. Alize和NIST中sphere2.7编译问题
  11. linux下批量查找文件内容
  12. Codeforces Round 701 Multiples and Power Differences
  13. cocos2d-js 接入anysdk
  14. 如何将图片调整为固定大小?怎么自定义压缩图片大小?
  15. 配置运营商光猫做交换机拓展网络
  16. dhtmlxgrid导出的js_dhtmlx之dhtmlXGrid显示数据
  17. Codeforces Round #616 (Div. 2)B. Array Sharpening
  18. 不等式$\sum x_i^3(1-x_i)\leq\frac{1}{8}$
  19. Python .pyc的编译和反编译
  20. 解决报错dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.62.dylib

热门文章

  1. iis mysql版本切换_MySQL+PHP配置 Windows系统IIS版(转)
  2. Unity 2017 Game Optimization 读书笔记 Dynamic Graphics (5) Shader优化
  3. c语言某一行不被优化,C语言优化小技巧
  4. carsim输出端口2的宽度无效_PIO CORE 解析 (2)
  5. UFLDL教程:Exercise:Convolution and Pooling
  6. livebos--iframe使用
  7. 【转】小白级的CocoaPods安装和使用教程
  8. linux命令详解——iostat
  9. 解决:缺少aclocal、autoconf、automake
  10. dbgrideh的功能