使用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中的__new__()方法的使用
Apr 09 Python
Python实现对字符串的加密解密方法示例
Apr 29 Python
python生成tensorflow输入输出的图像格式的方法
Feb 12 Python
用python处理MS Word的实例讲解
May 08 Python
python3.7 使用pymssql往sqlserver插入数据的方法
Jul 08 Python
Python中的self用法详解
Aug 06 Python
python实现网站微信登录的示例代码
Sep 18 Python
Python中itertools的用法详解
Feb 07 Python
Python通过2种方法输出带颜色字体
Mar 02 Python
Python偏函数实现原理及应用
Nov 20 Python
用python画城市轮播地图
May 28 Python
OpenCV-Python实现人脸美白算法的实例
Jun 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的ASP防火墙
2006/10/09 PHP
php5.5新数组函数array_column使用
2013/07/08 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
2014/07/22 PHP
PHP使用CURL实现多线程抓取网页
2015/04/30 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
jquery 简短右键菜单 多浏览器兼容
2010/01/01 Javascript
JavaScript对象链式操作代码(jquery)
2010/07/04 Javascript
一些常用弹出窗口/拖放/异步文件上传等实用代码
2013/01/06 Javascript
一道关于JavaScript变量作用域的面试题
2016/03/08 Javascript
使用jquery获取url及url参数的简单实例
2016/06/14 Javascript
3分钟掌握常用的JS操作JSON方法总结
2017/04/25 Javascript
Vue SPA单页应用首屏优化实践
2018/06/28 Javascript
微信小程序实现的自定义分享功能示例
2019/02/12 Javascript
vue 使用高德地图vue-amap组件过程解析
2019/09/07 Javascript
javascript实现动态时钟的启动和停止
2020/07/29 Javascript
[03:30]DOTA2完美“圣”典精彩集锦
2016/12/27 DOTA
Python内置模块logging用法实例分析
2018/02/12 Python
pandas 空数据处理方法详解
2019/11/02 Python
python 实现list或string按指定分段
2019/12/25 Python
python操作yaml说明
2020/04/08 Python
python之openpyxl模块的安装和基本用法(excel管理)
2021/02/03 Python
美国精品家居用品网站:US-Mattress
2016/08/24 全球购物
应届生求职推荐信
2013/10/28 职场文书
校运会入场式解说词
2014/02/10 职场文书
2015年幼儿园毕业感言
2014/02/12 职场文书
吨的认识教学反思
2014/04/27 职场文书
治超工作实施方案
2014/05/04 职场文书
工厂车间标语
2014/06/19 职场文书
单位实习介绍信
2015/05/05 职场文书
写给纪委的违纪检讨书
2015/05/05 职场文书
小型婚礼主持词
2015/06/30 职场文书
三八节活动主持词
2015/07/04 职场文书
家长对孩子的寒假评语
2015/10/09 职场文书
2016七夕情人节广告语
2016/01/28 职场文书
Python基于百度API识别并提取图片中文字
2021/06/27 Python
CSS中理解层叠性及权重如何分配
2022/12/24 HTML / CSS