近日,在瀏覽伯樂在線(http://blog.jobbole.com/29281/)的時候碰到一些很不錯的資源:25本免費的Python電子書
如下圖:
其中,每本都是以名字+超鏈接的方式,於是激起了我寫個小程序保存這些資源的欲望,順便也能練習一些不太熟練的小爬蟲 : ) 。 好了,我們開始吧!
先展示一下成果給大家看嗯: 如圖
每本書都很有條理的保存在本地文檔中,結果還是挺滿意的哈。
首先呢 要完成這些工作大概要分為一下幾個步驟:
1. 獲得整個頁面的源代碼 (網頁源碼HTML)
2. 獲得目標區域的源代碼 (縮小范圍)
3. 在小范圍內匹配資源的URL
4. 將匹配到的資源URL寫入到本地保存
下面,將分為4個步驟來分部展示Python程序
第一,獲得整個頁面的源代碼:
1 def getHtml(url): 2 html = urllib.urlopen(url) 3 sorce = html.read() 4 return sorce
該段代碼將返回資源所在的整個頁面的HTML源代碼
第二,獲得目標區域的源代碼 (縮小范圍):
1 def getRange(content): 2 start0 = content.find(r'<div class="entry">') 3 start = content.find(r'<ol>',start0) 4 end = content.find(r'<div id="ad1">',start) 5 content2 = content[start:end] 6 return content2
第三,匹配資源的URL:
1 def getLink(content2): 2 reg = re.compile(r'<a href="(.*?[.html|.pdf]?)" target=') 3 result = reg.findall(content2) 4 return result 5 6 def getName(content2): 7 reg = re.compile(r'<a href=".*?[.html|.pdf]?" target="_blank">(.*?)</a>') 8 result2 = reg.findall(content2) 9 return result2
以上倆個函數分別用來匹配資源的 鏈接 和 書名
第四,保存到本體:
即是在print 的基礎上從定向到文件中。詳見下面的完整代碼 : )
下面是完整代碼:
1 #!/usr/bin/env python 2 #coding:utf-8 3 4 import urllib 5 import re 6 7 def getHtml(url): 8 html = urllib.urlopen(url) 9 sorce = html.read() 10 return sorce 11 12 def getRange(content): 13 start0 = content.find(r'<div class="entry">') 14 start = content.find(r'<ol>',start0) 15 end = content.find(r'<div id="ad1">',start) 16 content2 = content[start:end] 17 return content2 18 19 def getLink(content2): 20 reg = re.compile(r'<a href="(.*?[.html|.pdf]?)" target=') 21 result = reg.findall(content2) 22 return result 23 24 def getName(content2): 25 reg = re.compile(r'<a href=".*?[.html|.pdf]?" target="_blank">(.*?)</a>') 26 result2 = reg.findall(content2) 27 return result2 28 29 if __name__ == '__main__': 30 content = getHtml(r'http://blog.jobbole.com/29281/') 31 content2 = getRange(content) 32 link = getLink(content2) 33 name = getName(content2) 34 i = 1 35 f = open('content.txt','w+') 36 for x, y in zip(name, link): 37 print >>f, str(i),": ",x, 38 print >>f 39 print >>f,y 40 i = i + 1
看到這里您辛苦了,謝謝 : )
—————————————————————————————————————————————————————————————————————————————
聲明:
本文為 大Yi巴狼 對自己所學的知識整理和實現。
本文檔歡迎自由轉載,但請務必保持本文檔完整或注明來之本文檔。本文檔未經 大Yi巴狼 同意,不得用於商業用途。最后,如果您能從這個簡單文檔里獲得些許幫助,大Yi巴狼 將對自己的一點努力感到非常高興;由於作者本人水平有限,如果本文檔中包含的錯誤給您造成了不便,在此提前說聲抱歉。
祝身體健康,工作順利。