使用python采集脚本之家电子书资源并自动下载到本地的实例脚本


Posted in Python onOctober 23, 2018

3water上面的资源还比较全,就准备用python来实现自动采集信息,与下载啦。

Python具有丰富和强大的库,使用urllib,re等就可以轻松开发出一个网络信息采集器!

下面,是我写的一个实例脚本,用来采集某技术网站的特定栏目的所有电子书资源,并下载到本地保存!

软件运行截图如下:

使用python采集脚本之家电子书资源并自动下载到本地的实例脚本

在脚本运行时期,不但会打印出信息到shell窗口,还会保存日志到txt文件,记录采集到的页面地址,书籍的名称,大小,服务器本地下载地址以及百度网盘的下载地址!

实例采集并下载三水点靠木的python栏目电子书资源:

# -*- coding:utf-8 -*-
import re
import urllib2
import urllib
import sys
import os
reload(sys)
sys.setdefaultencoding('utf-8')
def getHtml(url):
 request = urllib2.Request(url)
 page = urllib2.urlopen(request)
 htmlcontent = page.read()
 #解决中文乱码问题
 htmlcontent = htmlcontent.decode('gbk', 'ignore').encode("utf8",'ignore')
 return htmlcontent
def report(count, blockSize, totalSize):
 percent = int(count*blockSize*100/totalSize)
 sys.stdout.write("r%d%%" % percent + ' complete')
 sys.stdout.flush()
def getBookInfo(url):
 htmlcontent = getHtml(url);
 #print "htmlcontent=",htmlcontent; # you should see the ouput html
 #<h1 class="h1user">crifan</h1>
 regex_title = '<h1s+?itemprop="name">(?P<title>.+?)</h1>';
 title = re.search(regex_title, htmlcontent);
 if(title):
 title = title.group("title");
 print "书籍名字:",title;
 file_object.write('书籍名字:'+title+'r');
 #<li>书籍大小:<span itemprop="fileSize">27.2MB</span></li>
 filesize = re.search('<spans+?itemprop="fileSize">(?P<filesize>.+?)</span>', htmlcontent);
 if(filesize):
 filesize = filesize.group("filesize");
 print "文件大小:",filesize;
 file_object.write('文件大小:'+filesize+'r');
 #<div class="picthumb"><a href="//img.jbzj.com/do/uploads/litimg/151210/1A9262GO2.jpg" target="_blank"
 bookimg = re.search('<divs+?class="picthumb"><a href="(?P<bookimg>.+?)" rel="external nofollow" target="_blank"', htmlcontent);
 if(bookimg):
 bookimg = bookimg.group("bookimg");
 print "封面图片:",bookimg;
 file_object.write('封面图片:'+bookimg+'r');
 #<li><a href="http://xz6.3water.com:81/201512/books/JavaWeb100(3water.com).rar" target="_blank">酷云中国电信下载</a></li>
 downurl1 = re.search('<li><a href="(?P<downurl1>.+?)" rel="external nofollow" target="_blank">酷云中国电信下载</a></li>', htmlcontent);
 if(downurl1):
 downurl1 = downurl1.group("downurl1");
 print "下载地址1:",downurl1; 
 file_object.write('下载地址1:'+downurl1+'r');
 sys.stdout.write('rFetching ' + title + '...n')
 title = title.replace(' ', '');
 title = title.replace('/', '');
 saveFile = '/Users/superl/Desktop/pythonbook/'+title+'.rar';
 if os.path.exists(saveFile):
 print "该文件已经下载了!";
 else:
 urllib.urlretrieve(downurl1, saveFile, reporthook=report);
 sys.stdout.write("rDownload complete, saved as %s" % (saveFile) + 'nn')
 sys.stdout.flush()
 file_object.write('文件下载成功!r');
 else:
 print "下载地址1不存在";
 file_error.write(url+'r');
 file_error.write(title+"下载地址1不存在!文件没有自动下载!r");
 file_error.write('r');
 #<li><a href="http://pan.baidu.com/s/1pKfVNwJ" rel="external nofollow" target="_blank">百度网盘下载2</a></li>
 downurl2 = re.search('</a></li><li><a href="(?P<downurl2>.+?)" rel="external nofollow" target="_blank">百度网盘下载2</a></li>', htmlcontent);
 if(downurl2):
 downurl2 = downurl2.group("downurl2");
 print "下载地址2:",downurl2; 
 file_object.write('下载地址2:'+downurl2+'r');
 else:
 #file_error.write(url+'r');
 print "下载地址2不存在"; 
 file_error.write(title+"下载地址2不存在r");
 file_error.write('r');
 file_object.write('r');
 print "n";
def getBooksUrl(url):
 htmlcontent = getHtml(url);
 #<ul class="cur-cat-list"><a href="/books/438381.html" rel="external nofollow" class="tit"</ul></div><!--end #content -->
 urls = re.findall('<a href="(?P<urls>.+?)" rel="external nofollow" class="tit"', htmlcontent);
 for url in urls:
 url = "//3water.com"+url;
 print url+"n";
 file_object.write(url+'r');
 getBookInfo(url)
 #print "url->", url
if __name__=="__main__":
 file_object = open('/Users/superl/Desktop/python.txt','w+');
 file_error = open('/Users/superl/Desktop/pythonerror.txt','w+');
 pagenum = 3;
 for pagevalue in range(1,pagenum+1):
 listurl = "//3water.com/ books/list476_%d.html"%pagevalue;
 print listurl;
 file_object.write(listurl+'r');
 getBooksUrl(listurl);
 file_object.close();
 file_error.close();

注意,上面代码部分地方的url被我换了。

总结

以上所述是小编给大家介绍的python采集3water电子书资源并自动下载到本地实例脚本,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python使用ctypes模块调用windowsapi获取系统版本示例
Apr 17 Python
pycharm 使用心得(五)断点调试
Jun 06 Python
Python实现的几个常用排序算法实例
Jun 16 Python
Python、Javascript中的闭包比较
Feb 04 Python
hmac模块生成加入了密钥的消息摘要详解
Jan 11 Python
30秒轻松实现TensorFlow物体检测
Mar 14 Python
Python装饰器模式定义与用法分析
Aug 06 Python
python面试题Python2.x和Python3.x的区别
May 28 Python
Python中xml和dict格式转换的示例代码
Nov 07 Python
Python调用OpenCV实现图像平滑代码实例
Jun 19 Python
Django Auth用户认证组件实现代码
Oct 13 Python
python空元组在all中返回结果详解
Dec 15 Python
Python读取mat文件,并保存为pickle格式的方法
Oct 23 #Python
Python读取系统文件夹内所有文件并统计数量的方法
Oct 23 #Python
Python实现按逗号分隔列表的方法
Oct 23 #Python
Python解析Excle文件中的数据方法
Oct 23 #Python
使用python对excle和json互相转换的示例
Oct 23 #Python
Python实现将Excel转换成为image的方法
Oct 23 #Python
python pandas实现excel转为html格式的方法
Oct 23 #Python
You might like
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
PHP中quotemeta()函数的用法讲解
2019/04/04 PHP
关于B/S判断浏览器断开的问题讨论
2008/10/29 Javascript
javascript 延迟加载技术(lazyload)简单实现
2011/01/17 Javascript
对table和ul实现js分页示例分享
2014/02/24 Javascript
防止按钮在短时间内被多次点击的方法
2014/03/10 Javascript
js实现div闪烁原理及实现代码
2014/06/24 Javascript
三种取消选中单选框radio的方法
2014/09/09 Javascript
js+ajax实现获取文件大小的方法
2015/12/08 Javascript
jQuery自定义滚动条完整实例
2016/01/08 Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
2016/04/21 Javascript
高效Web开发的10个jQuery代码片段
2016/07/22 Javascript
浅谈js中StringBuffer类的实现方法及使用
2016/09/02 Javascript
jQuery查找节点并获取节点属性的方法
2016/09/09 Javascript
轻松实现jQuery添加删除按钮Click事件
2017/03/13 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
2017/03/14 Javascript
微信小程序 页面滑动事件的实例详解
2017/10/12 Javascript
详解vue文件中使用echarts.js的两种方式
2018/10/18 Javascript
Vue多组件仓库开发与发布详解
2019/02/28 Javascript
使用python实现strcmp函数功能示例
2014/03/25 Python
python模块之StringIO使用示例
2015/04/08 Python
python写入中英文字符串到文件的方法
2015/05/06 Python
对python实时得到鼠标位置的示例讲解
2018/10/14 Python
python time.sleep()是睡眠线程还是进程
2019/07/09 Python
解析Python3中的Import
2019/10/13 Python
python绘制雪景图
2019/12/16 Python
利用Python如何实时检测自身内存占用
2020/05/09 Python
马来西亚在线购物市场:PGMall.my
2019/10/13 全球购物
八一演出活动方案
2014/02/03 职场文书
网页美工求职信范文
2014/04/17 职场文书
最新优秀教师个人先进事迹材料
2014/05/06 职场文书
工作总结与自我评价
2014/09/18 职场文书
高中社区服务活动报告
2015/02/05 职场文书
春晚观后感
2015/06/11 职场文书
学会感恩主题班会
2015/08/12 职场文书
深入理解java.lang.String类的不可变性
2021/06/27 Java/Android