作者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
1F:→ ilay:神人出现了 <(_ _)> 04/19 13:45
2F:→ ilay:请问一下捞出来的xml要取区域名称堆成list要怎做呢@@ 04/19 16:38
3F:→ kilfu0701:这就要parsing xml吧 04/19 16:48
4F:推 retard:强 04/19 17:17
5F:推 zenixls2:实用 04/20 00:40
6F:→ iincho:高手 04/21 14:33
7F:→ bob123:赞 04/22 03:55
8F:→ ilay:对了我发现为什麽loop跑下去的时候是从桃园开始XD 04/22 10:45
9F:→ ilay:北北基都消失了XD 04/22 10:45
10F:→ ilay:抱歉看错了 但是这为什麽不是照顺序跑下来的@@ 04/22 10:47
11F:→ bob123:要照顺序用list或OrderedDict 04/22 16:26