1. 程式人生 > >python抓取

python抓取

info 奧巴馬 www word ref str source div term

我要抓取奧巴馬每周的演講內容http://www.putclub.com/html/radio/VOA/presidentspeech/index.html

如果手動提取,就需要一個個點進去,再復制保存,非常麻煩。

那有沒有一步到位的方法呢,用python這種強大的語言就能快速實現。

首先我們看看這網頁的源碼

技術分享

技術分享

可以發現,我們要的信息就在這樣技術分享一小條url中。

更具體點說,就是我們要遍歷每個類似http://www.putclub.com/html/radio/VOA/presidentspeech/2014/0928/91326.html這樣的網址,而這網址需要從上面的網頁中提取。

好,開始寫代碼

首先打開這個目錄頁,保存在content

[python] view plain copy
  1. import sys,urllib
  2. url="http://www.putclub.com/html/radio/VOA/presidentspeech/index.html"
  3. wp = urllib.urlopen(url)
  4. print "start download..."
  5. content = wp.read()

下面要提取出每一篇演講的內容

具體思路是搜索“center_box”之後,每個“href=”和“target”之間的內容。為什麽是這兩個之間,請看網頁源碼。

得到的就是每一篇的url,再在前面加上www.putclub.com就是每一篇文章的網址啦

[html] view plain copy
  1. print content.count("center_box")
  2. index = content.find("center_box")
  3. content=content[content.find("center_box")+1:]
  4. content=content[content.find("href=")+7:content.find("target")-2]
  5. filename = content
  6. url ="http://www.putclub.com/"+content
  7. print content
  8. print url
  9. wp = urllib.urlopen(url)
  10. print "start download..."
  11. content = wp.read()

有了文章內容的url後,同樣的方法篩選內容。

[python] view plain copy
  1. #print content
  2. print content.count("<div class=\"content\"")
  3. #content = content[content.find("<div class=\"content\""):]
  4. content = content[content.find("<!--info end------->"):]
  5. content = content[:content.find("<div class=\"dede_pages\"")-1]
  6. filename = filename[filename.find("presidentspeech")+len("presidentspeech/"):]

最後再保存並打印

[python] view plain copy
  1. filename = filename.replace(‘/‘,"-",filename.count("/"))
  2. fp = open(filename,"w+")
  3. fp.write(content)
  4. fp.close()
  5. print content


OK,大功告成!保存成.pyw文件,以後只需雙擊就直接保存下了obama每周演講內容~

python抓取