使用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中的filter()函数的用法
Apr 27 Python
Python实现将DOC文档转换为PDF的方法
Jul 25 Python
Python实现基于C/S架构的聊天室功能详解
Jul 07 Python
python PrettyTable模块的安装与简单应用
Jan 11 Python
django 实现编写控制登录和访问权限控制的中间件方法
Jan 15 Python
Python使用Pandas对csv文件进行数据处理的方法
Aug 01 Python
python argparser的具体使用
Nov 10 Python
python 协程 gevent原理与用法分析
Nov 22 Python
python Plotly绘图工具的简单使用
Mar 03 Python
Python tkinter 下拉日历控件代码
Mar 04 Python
Python中zipfile压缩文件模块的基本使用教程
Jun 14 Python
termux中matplotlib无法显示中文问题的解决方法
Jan 11 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提取字符串中的图片地址[正则表达式]
2011/11/12 PHP
php实现的SESSION类
2014/12/02 PHP
laravel 验证错误信息到 blade模板的方法
2019/09/29 PHP
JXTree对象,读取外部xml文件数据,生成树的函数
2007/04/02 Javascript
jquery 插件 web2.0分格的分页脚本,可用于ajax无刷新分页
2008/12/25 Javascript
Javascript查询DBpedia小应用实例学习
2013/03/07 Javascript
js中使用replace方法完成某个字符的转换
2014/08/20 Javascript
js解决select下拉选不中问题
2014/10/14 Javascript
超级简单的jquery操作表格方法
2014/12/15 Javascript
DOM基础教程之使用DOM + Css
2015/01/20 Javascript
jQuery Validate初步体验(二)
2015/12/12 Javascript
使用Node.js给图片加水印的方法
2016/11/15 Javascript
原生js编写基于面向对象的分页组件
2016/12/05 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
2017/02/16 Javascript
JavaScript实现的冒泡排序法及统计相邻数交换次数示例
2017/04/26 Javascript
JS实现简单表格排序操作示例
2017/10/07 Javascript
jQuery Dom元素操作技巧
2018/02/04 jQuery
微信小程序使用Promise简化回调
2018/02/06 Javascript
详解微信JS-SDK选择图片遇到的坑
2018/08/15 Javascript
微信小程序带动画弹窗组件使用方法详解
2018/11/27 Javascript
教你30秒发布一个TypeScript包到NPM的方法步骤
2019/07/22 Javascript
Javascript执行流程细节原理解析
2020/05/14 Javascript
使用Python的urllib和urllib2模块制作爬虫的实例教程
2016/01/20 Python
修改默认的pip版本为对应python2.7的方法
2018/11/06 Python
如何使用pandas读取txt文件中指定的列(有无标题)
2020/03/05 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
2020/06/23 Python
Sneaker Studio匈牙利:购买运动鞋
2018/03/26 全球购物
Nike德国官网:Nike.com (DE)
2018/11/13 全球购物
VC++笔试题
2014/10/13 面试题
建筑学推荐信
2013/11/03 职场文书
反四风对照检查材料思想汇报
2014/09/16 职场文书
公安四风对照检查材料思想汇报
2014/10/11 职场文书
房屋买卖定金协议书
2016/03/21 职场文书
go语言中fallthrough的用法说明
2021/05/06 Golang
python3实现无权最短路径的方法
2021/05/12 Python
「女孩的钓鱼慢活」全新版权绘公布
2022/03/21 日漫