使用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 相关文章推荐
Linux下使用python调用top命令获得CPU利用率
Mar 10 Python
Python Socket实现简单TCP Server/client功能示例
Aug 05 Python
python使用正则表达式替换匹配成功的组
Nov 17 Python
Python爬虫工程师面试问题总结
Mar 22 Python
python寻找list中最大值、最小值并返回其所在位置的方法
Jun 27 Python
python处理两种分隔符的数据集方法
Dec 12 Python
python批量处理文件或文件夹
Jul 28 Python
用Python画一个LinkinPark的logo代码实例
Sep 10 Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
Apr 21 Python
Python xmltodict模块安装及代码实例
Oct 05 Python
在PyCharm中安装PaddlePaddle的方法
Feb 05 Python
python数字图像处理:图像的绘制
Jun 28 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和XSL stylesheets转换XML文档
2006/10/09 PHP
PHP实现的XML操作类【XML Library】
2016/12/29 PHP
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
jquery DIV撑大让滚动条滚到最底部代码
2013/06/06 Javascript
浅析jQuery移动开发中内联按钮和分组按钮的编写
2015/12/04 Javascript
AngularJs ng-route路由详解及实例代码
2016/09/14 Javascript
javascript数据结构之串的概念与用法分析
2017/04/12 Javascript
JS条形码(一维码)插件JsBarcode用法详解【编码类型、参数、属性】
2017/04/19 Javascript
WebSocket实现简单客服聊天系统
2017/05/12 Javascript
ReactNative中使用Redux架构总结
2017/12/15 Javascript
Vue项目查看当前使用的elementUI版本的方法
2018/09/27 Javascript
在vscode 中设置 vue模板内容的方法
2020/09/02 Javascript
Vue3为什么这么快
2020/09/23 Javascript
[01:11:37]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第一场 11.19
2020/11/19 DOTA
Python开发常用的一些开源Package分享
2015/02/14 Python
Python中的字符串类型基本知识学习教程
2016/02/04 Python
实例解析Python设计模式编程之桥接模式的运用
2016/03/02 Python
python实现rsa加密实例详解
2017/07/19 Python
Python实现KNN邻近算法
2021/01/28 Python
python 剪切移动文件的实现代码
2018/08/02 Python
python进行文件对比的方法
2018/12/24 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
2020/05/24 Python
keras实现多GPU或指定GPU的使用介绍
2020/06/17 Python
python 如何调用 dubbo 接口
2020/09/24 Python
pytorch 实现L2和L1正则化regularization的操作
2021/03/03 Python
施华洛世奇巴西官网:SWAROVSKI巴西
2019/12/03 全球购物
《自选商场》教学反思
2014/02/14 职场文书
房产委托公证书
2014/04/08 职场文书
廉洁家庭事迹材料
2014/05/15 职场文书
司法助理专业自荐书
2014/06/13 职场文书
党的群众路线教育实践活动整改落实情况自查报告
2014/10/28 职场文书
详解使用 CSS prefers-* 规范提升网站的可访问性与健壮性
2021/05/25 HTML / CSS
Java如何实现通过键盘输入一个数组
2022/02/15 Java/Android
微软Win11 全新照片应用面向 Dev预览版推出 新版本上手体验图集
2022/09/23 数码科技
mysql序号rownum行号实现方式
2022/12/24 MySQL
Android实现获取短信验证码并自动填充
2023/05/21 Java/Android