使用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中的With语句
Feb 02 Python
python实现下载文件的三种方法
Feb 09 Python
python编程羊车门问题代码示例
Oct 25 Python
Python输出各行命令详解
Feb 01 Python
Python使用matplotlib绘图无法显示中文问题的解决方法
Mar 14 Python
Python turtle绘画象棋棋盘
Aug 21 Python
django 多对多表的创建和插入代码实现
Sep 09 Python
Python Gluon参数和模块命名操作教程
Dec 18 Python
Python实现手机号自动判断男女性别(实例解析)
Dec 22 Python
Python OrderedDict字典排序方法详解
May 21 Python
Python列表推导式实现代码实例
Sep 09 Python
Pandas实现批量拆分与合并Excel的示例代码
May 30 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数值转换时间及时间转换数值用法示例
2017/05/18 PHP
Yii框架学习笔记之session与cookie简单操作示例
2019/04/30 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
2019/10/16 PHP
javascript 框架小结 个人工作经验
2009/06/13 Javascript
jQuery操作select的实例代码
2012/06/14 Javascript
关于JavaScript中原型继承中的一点思考
2012/07/25 Javascript
js导航栏单击事件背景变换示例代码
2014/01/13 Javascript
button没写type=button会导致点击时提交
2014/03/06 Javascript
Nodejs极简入门教程(三):进程
2014/10/27 NodeJs
基于bootstrap3和jquery的分页插件
2015/07/31 Javascript
深入解析Javascript闭包的功能及实现方法
2016/07/10 Javascript
json与jsonp知识小结(推荐)
2016/08/16 Javascript
chrome浏览器如何断点调试异步加载的JS
2016/09/05 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
JavaScript JMap类定义与使用方法示例
2019/01/22 Javascript
如何实现iframe父子传参通信
2020/02/05 Javascript
原生js实现弹窗消息动画
2020/11/20 Javascript
WebPack工具运行原理及入门教程
2020/12/02 Javascript
JavaScript Html实现移动端红包雨功能页面
2021/01/10 Javascript
[00:39]DOTA2上海特级锦标赛 Liquid战队宣传片
2016/03/04 DOTA
python生成指定长度的随机数密码
2014/01/23 Python
Python统计列表中的重复项出现的次数的方法
2014/08/18 Python
PYcharm 激活方法(推荐)
2020/03/23 Python
win10从零安装配置pytorch全过程图文详解
2020/05/08 Python
Python新手学习装饰器
2020/06/04 Python
详解Python中import机制
2020/09/11 Python
python利用 keyboard 库记录键盘事件
2020/10/16 Python
企业面试题试卷附带答案
2015/12/20 面试题
医学专业毕业生个人的求职信
2013/12/04 职场文书
单位消防安全制度
2014/01/12 职场文书
大学生党校培训心得体会
2014/09/11 职场文书
六一文艺汇演开幕词
2015/01/29 职场文书
2015年社区工作总结
2015/04/08 职场文书
z-index不起作用
2021/03/31 HTML / CSS
Python中Permission denied的解决方案
2021/04/02 Python
Oracle数据库中通用的函数实例详解
2022/03/25 Oracle