顯示具有 Python 標籤的文章。 顯示所有文章
顯示具有 Python 標籤的文章。 顯示所有文章

2014年1月13日 星期一

[Python] 小用法備忘

最近很少跟他打交道,有些小東西雖然基本,但是久不用就會忘記阿阿阿阿阿

lambda

有別於function的寫法,lamda用過即丟,用來建立簡單的function
>>> test = lambda x,y,z: x*y*z
>>> test(1,2,3)
6

filter

用filter函數把不符條件的element濾掉
>>> a = [31,545,21,2,0,231,56]
>>> func = lambda x: x>2
>>> filter(func,a)
[31, 545, 21, 231, 56]

map

用map函數計算每個member的結果
>>> a = [31,545,21,2,0,231,56]
>>> func = lambda x: x+2
>>> map(func, a)
[33, 547, 23, 4, 2, 233, 58]

reduce

用reduce計算$f(f...f(f(x_{0},x_{1}),x_{2})..,x_{n})$
>>> a = [1,2,3,4,5]
>>> func = lambda x,y: x*y
>>> reduce(func, a)
120

range & xrange

用range 函數來產生數列
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

xrange函數用在迴圈中加強效能
>>> for i in xrange(10):
 print(i)

 
0
1
2
3
4
5
6
7
8
9

iterate寫法

iterate寫法是python特有的解決方案,和for loop類似
[i*5 for i in xrange(4)]
[0, 5, 10, 15]

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