使用python采集腳本之家電子書(shū)資源并自動(dòng)下載到本地的實(shí)例腳本
jb51上面的資源還比較全,就準(zhǔn)備用python來(lái)實(shí)現(xiàn)自動(dòng)采集信息,與下載啦。
Python具有豐富和強(qiáng)大的庫(kù),使用urllib,re等就可以輕松開(kāi)發(fā)出一個(gè)網(wǎng)絡(luò)信息采集器!
下面,是我寫(xiě)的一個(gè)實(shí)例腳本,用來(lái)采集某技術(shù)網(wǎng)站的特定欄目的所有電子書(shū)資源,并下載到本地保存!
軟件運(yùn)行截圖如下:

在腳本運(yùn)行時(shí)期,不但會(huì)打印出信息到shell窗口,還會(huì)保存日志到txt文件,記錄采集到的頁(yè)面地址,書(shū)籍的名稱(chēng),大小,服務(wù)器本地下載地址以及百度網(wǎng)盤(pán)的下載地址!
實(shí)例采集并下載腳本之家的python欄目電子書(shū)資源:
# -*- 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()
#解決中文亂碼問(wèn)題
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 "書(shū)籍名字:",title;
file_object.write('書(shū)籍名字:'+title+'r');
#<li>書(shū)籍大小:<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 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 target="_blank">酷云中國(guó)電信下載</a></li>
downurl1 = re.search('<li><a href="(?P<downurl1>.+?)" rel="external nofollow" target="_blank">酷云中國(guó)電信下載</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 "該文件已經(jīng)下載了!";
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不存在!文件沒(méi)有自動(dòng)下載!r");
file_error.write('r');
#<li><a rel="external nofollow" target="_blank">百度網(wǎng)盤(pán)下載2</a></li>
downurl2 = re.search('</a></li><li><a href="(?P<downurl2>.+?)" rel="external nofollow" target="_blank">百度網(wǎng)盤(pán)下載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 = "http://www.dhdzp.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 = "http://www.dhdzp.com/ books/list476_%d.html"%pagevalue;
print listurl;
file_object.write(listurl+'r');
getBooksUrl(listurl);
file_object.close();
file_error.close();
注意,上面代碼部分地方的url被我換了。
總結(jié)
以上所述是小編給大家介紹的python采集jb51電子書(shū)資源并自動(dòng)下載到本地實(shí)例腳本,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Python腳本實(shí)現(xiàn)下載合并SAE日志
- Python實(shí)現(xiàn)的飛速中文網(wǎng)小說(shuō)下載腳本
- 編寫(xiě)Python腳本來(lái)實(shí)現(xiàn)最簡(jiǎn)單的FTP下載的教程
- 編寫(xiě)Python腳本批量下載DesktopNexus壁紙的教程
- 利用python寫(xiě)個(gè)下載teahour音頻的小腳本
- Python實(shí)現(xiàn)多線(xiàn)程下載腳本的示例代碼
- 寫(xiě)一個(gè)Python腳本下載嗶哩嗶哩舞蹈區(qū)的所有視頻
- Python實(shí)現(xiàn)一鍵下載視頻腳本
- Python百度指數(shù)獲取腳本下載并保存
相關(guān)文章
Python 創(chuàng)建TCP服務(wù)器的方法
這篇文章主要介紹了Python 創(chuàng)建TCP服務(wù)器的方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07
Python模擬登錄網(wǎng)易云音樂(lè)并自動(dòng)簽到
時(shí)隔三周沒(méi)有和大家見(jiàn)過(guò)面了,最近在研究python模擬登陸專(zhuān)題,話(huà)不多說(shuō),讓我們愉快地開(kāi)始實(shí)現(xiàn)模擬登陸實(shí)現(xiàn)網(wǎng)易云自動(dòng)簽到,需要的朋友可以參考下2021-06-06
Jupyter Lab設(shè)置切換虛擬環(huán)境的實(shí)現(xiàn)步驟
本文主要介紹了Jupyter Lab設(shè)置切換虛擬環(huán)境的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
Python中實(shí)現(xiàn)定時(shí)任務(wù)常見(jiàn)的幾種方式
在Python中,實(shí)現(xiàn)定時(shí)任務(wù)是一個(gè)常見(jiàn)的需求,無(wú)論是在自動(dòng)化腳本、數(shù)據(jù)處理、系統(tǒng)監(jiān)控還是其他許多應(yīng)用場(chǎng)景中,Python提供了多種方法來(lái)實(shí)現(xiàn)定時(shí)任務(wù),包括使用標(biāo)準(zhǔn)庫(kù)、第三方庫(kù)以及系統(tǒng)級(jí)別的工具,本文將詳細(xì)介紹幾種常見(jiàn)的Python定時(shí)任務(wù)實(shí)現(xiàn)方式2024-08-08
Python實(shí)現(xiàn)的序列化和反序列化二叉樹(shù)算法示例
這篇文章主要介紹了Python實(shí)現(xiàn)的序列化和反序列化二叉樹(shù)算法,結(jié)合實(shí)例形式分析了Python二叉樹(shù)的構(gòu)造、遍歷、序列化、反序列化等相關(guān)操作技巧,需要的朋友可以參考下2019-03-03

