2013年9月9日 星期一

[Python] 超級基本的網頁抓取

這篇是完全沒有基礎的我最近的小小心得

厲害的爬蟲技巧在這裡完全都沒有喔~~~

沒辦法誰叫我實在是嫩了!




抓取步驟(EX: 中央氣象局台北市氣溫預報)

第一步:

先到想去的網頁,記下網址(廢話)

http://www.cwb.gov.tw/V7/forecast/taiwan/Taipei_City.htmimport urllib2

到想抓的東西上反藍後「檢查元素」



找到他的標籤

像我要找的這個東西的標簽就是「td」!!




然後把python打開

把該import的套件import(他們都是python內建的,算是非常仁慈)

然後繼承SGMLParser寫成一個叫做WeatherList的類別

『is_td』是SGMLParser內建的,因為我們要抓的東西是被「td」標簽的,所使在這裡是使用is_td,如果有不同需求也有is_a之類的可以使用。之後定義start_td和end_td函數,最後定義handle_data函數把被td標簽包住的東西全寫進name裡面。

import urllib2
from sgmllib import SGMLParser
 
class WeatherList(SGMLParser):
    is_td=""
    name=[]
    def start_td(self, attrs):
        self.is_td = 1
    def end_td(self):
        self.is_td=""
    def handle_data(self, text):  
        if self.is_td:
                self.name.append(text)  

寫完之後就可以開始抓囉!
content = urllib2.urlopen('http://www.cwb.gov.tw/V7/forecast/taiwan/Taipei_City.htm').read()

Tempreature = WeatherList()
Tempreature.feed(content)

for i in Tempreature.name:
    if '\t' not in i:
        print i.decode('utf-8')

首先先用urllib2的工具把目標網頁上的東西抓下來

然後把name裡的東西排除不要的東西(「\t」這種東西就別來亂了)

再把東西印出來,就可以囉~~
26 ~ 30
舒適至悶熱
0 %
26 ~ 34
舒適至易中暑
0 %
26 ~ 30
舒適至悶熱
0 %
31.1
24.8
360.5
05:38
18:05
08:53
20:27
°C
°F

7 則留言:

  1. 作者已經移除這則留言。

    回覆刪除
  2. 您好: 想請教一下,若在讀取 t d 時遇到 & nbsp
    如何讓他印出來為"-",而不是跳過,我卡在讀完資料後因為有& nbsp導致在判斷換行時有誤
    請求大師解惑
    THX

    回覆刪除
    回覆
    1. 作者已經移除這則留言。

      刪除
    2. 簡單來說就是td 與/td 裡面有空白符號,導致我無法正確換行

      刪除