作者kilfu0701 (( ̄ー+ ̄)キラリ)
看板Python
標題Re: [閒聊] 這個要怎麼parse...
時間Thu Apr 19 11:57:30 2012
※ 引述《ilay (說唱猜做玩)》之銘言:
引言吃光~~
主要還是需要cookies,不然直接request會有權限不足的問題
直接從
http://emap.pcsc.com.tw/01.htm 連的話,
網頁會出現"連線逾時"的頁面,
所以,要從
http://www.7-11.com.tw/search.asp開始
這邊會向
http://emap.pcsc.com.tw/emap_switch.aspx POST資料+redirect
cookie也是從這邊取得的
當取得到cookie後,就可以去取得你要的xml資料
以下是我寫的一個範例:(只抓取各縣市的鄉鎮 GetTown)
# -*- coding: utf-8 -*-
import urllib, urllib2, cookielib
# origin url: "
http://www.7-11.com.tw/search.asp"
# get cookies from "
http://emap.pcsc.com.tw/emap_switch.aspx"
data = {
'eshopparid': '999',
'eshopid': '996',
'eshoppwd': '711storemap',
'sid': '2',
'storecategory': '2',
'showtype': '1',
'storeid': ''
}
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode(data)
opener.open('
http://emap.pcsc.com.tw/emap_switch.aspx', login_data)
#print cj._cookies
#print cj._cookies['emap.pcsc.com.tw']['/']['yearmonth'].value
#print cj._cookies['emap.pcsc.com.tw']['/']['ASP.NET_SessionId'].value
# area code
area_code = {
'台北市': '01',
'基隆市': '02',
'新北市': '03',
'桃園縣': '04',
'新竹市': '05',
'新竹縣': '06',
'苗栗縣': '07',
'台中市': '08',
'台中縣': '09',
'彰化縣': '10',
'南投縣': '11',
'雲林縣': '12',
'嘉義市': '13',
'嘉義縣': '14',
'台南市': '15',
'台南縣': '16',
'高雄市': '17',
'高雄縣': '18',
'屏東縣': '19',
'宜蘭縣': '20',
'花蓮縣': '21',
'台東縣': '22',
'澎湖縣': '23',
'金門縣': '25',
'馬祖' : '24'
}
# start req some data
# GET TOWM
for i in area_code:
data = {
'commandid': 'GetTown',
'cityid': area_code[i]
}
post_data = urllib.urlencode(data)
resp = opener.open('
http://emap.pcsc.com.tw/EMapSDK.aspx', post_data)
print i, resp.read()
大致上是這樣,有錯誤的地方再提出來討論 :)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.74.124.193
→ ilay:神人出現了 <(_ _)> 04/19 13:45
→ ilay:請問一下撈出來的xml要取區域名稱堆成list要怎做呢@@ 04/19 16:38
→ kilfu0701:這就要parsing xml吧 04/19 16:48
推 retard:強 04/19 17:17
推 zenixls2:實用 04/20 00:40
→ iincho:高手 04/21 14:33
→ bob123:讚 04/22 03:55
→ ilay:對了我發現為什麼loop跑下去的時候是從桃園開始XD 04/22 10:45
→ ilay:北北基都消失了XD 04/22 10:45
→ ilay:抱歉看錯了 但是這為什麼不是照順序跑下來的@@ 04/22 10:47
→ bob123:要照順序用list或OrderedDict 04/22 16:26