利用Python爬最基本的網頁其實只用兩個步驟
- 取得網頁內容
- 解析他
而且從頭到尾只需要用到兩個類庫
(連結為API)
以http://www.taiwanlottery.com.tw/news/DrawNumber.aspx 該網頁為例
其實就是取得樂透彩中獎號碼
其實整個實作的概念很簡單也基本,首先觀察一下案例網站的原始碼,找到我們要取出的內容,而我們要取出的內容就是那些樂透彩名稱、期號、中獎號碼,稍微觀察一下你會發現這些我們需要的內容都被<li>這個標籤給包圍,那麼現在我們要做的就是取得這標籤裡的內容物
開始來寫Code了
首先匯入urllib2,SGMLParser這兩個類庫
import urllib2
from sgmllib import SGMLParser
建立一個類來繼承SGMLParser
class Lottery(SGMLParser):
def __init__(self):
SGMLParser.__init__(self)
self.is_li = ""
self.name = []
def start_li(self, attrs):
self.is_li = 1
def end_li(self):
self.is_li = ""
def handle_data(self, text):
if self.is_li == 1:
self.name.append(text)你會發現裡面的start_li、end_li、is_li的”li“就是我們要取得的標籤,也可以依照案例的不同而修改成其他的標籤,像是start_td、start_div等等
而name就是標籤裡的內容了
接著就是開始實作了,以下代碼為獲取整個網站內容
content = urllib2.urlopen('http://www.taiwanlottery.com.tw/news/DrawNumber.aspx').read()
content = urllib2.urlopen('http://www.taiwanlottery.com.tw/news/DrawNumber.aspx').read()
開始解析內容
lottery = Lottery()
liottery.feed(content)
for i in liottery.name:
i = i.replace(" ","")
if '\n' not in i:
print i
第一次執行會比較慢,只要沒馬上出現錯誤的結果都是好的
最終印出的結果如下
104
2
月
24
日獎號一覽表
大樂透
期別
第
104000021
期
本期中獎號碼
依大小順序排列:
28
39
41
46
48
09
39
28
03
48
41
49樂合彩
期別
第
104000021
期
本期中獎號碼
依大小順序排列:
28
39
41
46
48
39
28
03
48
41
4星彩
期別
第
104000047
期
本期中獎號碼
6
2
7
3星彩
期別
第
104000047
期
本期中獎號碼
2
3
今彩539
期別
第
104000047
期
本期中獎號碼
依大小順序排列:
12
14
23
27
14
23
12
11
39樂合彩
期別
第
104000047
期
本期中獎號碼
依大小順序排列:
12
14
23
27
14
23
12
11
References:
[Python] 超級基本的網頁抓取http://rightthewaygeek.blogspot.tw/2013/09/python.html
Python写爬虫——抓取网页并解析HTML
http://www.lovelucy.info/python-crawl-pages.html
沒有留言:
張貼留言