使用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爬虫之打包生成exe文件
Nov 06 Python
Python中的with语句与上下文管理器学习总结
Jun 28 Python
深度定制Python的Flask框架开发环境的一些技巧总结
Jul 12 Python
Python判断两个对象相等的原理
Dec 12 Python
TensorFlow实现AutoEncoder自编码器
Mar 09 Python
Python中使用遍历在列表中添加字典遇到的坑
Feb 27 Python
python爬虫之验证码篇3-滑动验证码识别技术
Apr 11 Python
Python实现插入排序和选择排序的方法
May 12 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
May 20 Python
Python基于unittest实现测试用例执行
Nov 25 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
Jan 28 Python
python生成可执行exe控制Microsip自动填写号码并拨打功能
Jun 21 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
php实现parent调用父类的构造方法与被覆写的方法
2015/02/11 PHP
使用图灵api创建微信聊天机器人
2015/07/23 PHP
修改Laravel5.3中的路由文件与路径
2016/08/10 PHP
CI框架入门之MVC简单示例
2016/11/21 PHP
PHP数组与字符串互相转换实例
2020/05/05 PHP
HTML IMG标签 onload 内存溢出导致浏览器CPU占用过高
2021/03/09 Javascript
Jquery 常用方法经典总结
2010/01/28 Javascript
jquery下json数组的操作实现代码
2010/08/09 Javascript
基于jquery实现的移入页面上空文本框时,让它变为焦点,移出清除焦点
2011/07/26 Javascript
JS小功能(setInterval实现图片效果显示时间)实例代码
2013/11/28 Javascript
js事件绑定快捷键以ctrl+k为例
2014/09/30 Javascript
jQuery网页选项卡插件rTabs用法实例分析
2015/08/26 Javascript
JS中setTimeout的巧妙用法前端函数节流
2016/03/24 Javascript
JS组件Bootstrap实现下拉菜单效果代码
2016/04/26 Javascript
VUE JS 使用组件实现双向绑定的示例代码
2017/01/10 Javascript
JavaScript实现form表单的多文件上传
2020/03/27 Javascript
vue路由传参三种基本方式详解
2019/12/09 Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
2020/04/22 Javascript
antd 表格列宽自适应方法以及错误处理操作
2020/10/27 Javascript
python将处理好的图像保存到指定目录下的方法
2019/01/10 Python
Python更换pip源方法过程解析
2020/05/19 Python
python中使用asyncio实现异步IO实例分析
2021/02/26 Python
使用HTML5中的contentEditable来将多行文本自动增高
2016/03/01 HTML / CSS
智利最大的网上商店:Linio智利
2016/11/24 全球购物
美国购买体育、音乐会和剧院门票网站:SelectATicket
2019/09/08 全球购物
接口可以包含哪些成员
2012/09/30 面试题
Shell编程面试题
2016/05/29 面试题
中科创达面试题
2016/12/28 面试题
教你怎样写好自我评价
2013/10/05 职场文书
业务员自荐信范文
2014/04/20 职场文书
商铺消防安全责任书
2014/07/29 职场文书
院党委组织查摆问题对照检查材料思想汇报2014
2014/10/08 职场文书
公积金接收函格式
2015/01/30 职场文书
城管年度个人总结
2015/02/28 职场文书
php TP5框架生成二维码链接
2021/04/01 PHP
Windows 11上手初体验:任务栏和开始菜单等迎来大改
2021/11/21 数码科技