Python爬蟲(小練習)


近日,在瀏覽伯樂在線(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巴狼 將對自己的一點努力感到非常高興;由於作者本人水平有限,如果本文檔中包含的錯誤給您造成了不便,在此提前說聲抱歉。

  祝身體健康,工作順利。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM