FME如何採集肯德基中國的所有門店位址(一)

2021-08-22 04:43:21 字數 2413 閱讀 5169

fme是個優秀的平台,並保持快速且持續的增長——更多的函式模組、更多的輸入輸出格式支援。python是膠水語言,最大的特點就是擴充套件模組豐富,與fme一拍即合。

一方面,fme借助pythoncaller實現了平台承載功能的擴充套件,在fme裡嵌入python,融合其他it技術,彰顯fme的平台特性;另一方面,fme自身功能凝聚到pyfme,組合到其他系統中提供專業的fme技術。

本文通過乙個網路資料探勘的範例,介紹在fme平台中,借助

pythoncaller

融合urllib2、re

(正則)、

beautifulsoup

(網頁資訊結構化分析)的實踐。

前言

python憑藉簡單易上手、跨平台、擴充套件模組豐富等特點,程式yuan、資料處理分析、運維等人士喜愛。

閱讀本文前,仔細參照下面兩篇亂馬、lkfree、毛毛蟲翻譯和撰寫的文章,動手試試。

python與fme(一)

python與fme(二)

python在fme中的使用(一)啟動和關閉python指令碼

用pythoncaller轉換器呼叫arcgis的gp工具

背景

平時瞎折騰,想弄到肯德基中國全國門店資料,找到了位址

。稍加分析,發現門店資料的手工查詢獲取步驟如下:

1、選擇網頁底部「餐廳查詢」標籤;

2、點「按省份」或者「按城市」,選擇城市;

3、出來頁面是該城市的門店清單;

至此,經過四個步驟,某乙個城市的肯德基門店資訊(名稱、位址、特色服務)資料就查詢到了。

分析

1、種子頁面,就是整個資料探勘的起點

此案例裡,「種子頁面」為

①城市選擇,分別按省份、按城市 ②

餐廳具體資訊,包括名稱、位址、特色服務 ③

翻頁資訊

2、城市清單,使用firefox的firebug來分析

這個頁面裡城市基本是在

下面的下,html頁面分析,比較流行的是beautifulsoup(4.0+版本之後叫bs4)

**片段:

root_s

= beautifulsoup.beautifulsoup(urllib2.urlopen(root_url).read()) ##

根據url

獲取html

頁面,再轉為

beautifulsoup

shen_info

= root_s.find('ul',attrs=) ##

根據分析的城市所在標籤特徵,來搜尋

3、切換城市,使用httpfox來抓取post資料報資訊以及返回結果

①是post提交的頁面 ②

是postdata,是程式裡構建post資料的依據。此案例裡有4個引數,分別為cname,pid,pageindex,pagesize,其中pagesize看起來預設值10可以調整 ③

返回資料,看起來是json串

json第一部分是rowcount是該城市門店數,下面是具體的門店資訊

fme實現

先想辦法把種子頁面解析好,然後分別提交查詢,獲取到json

其實就乙個轉換器,pythoncreator。這個轉換器與pythoncaller的區別是它沒有輸入僅有輸出,所以是整個轉換的起點。具體**如下

①解析種子頁面獲取城市清單; ②

遍歷提交查詢; ③

獲取結果,並將結果輸出到構造的feature中。

輸出結果為

第三篇介紹如何拆分解析json結果

#gis#[fme]不懂程式設計怎樣批量根據位址獲取經緯度

這個系列大致內容就是這些。

拓展閱讀

之前有介紹過類似案例,參見

FME如何採集肯德基中國的所有門店位址(二)

2016 09 09 11 34 49 參考上文 fme如何採集肯德基中國的所有門店位址 一 pythoncreator 與pythoncaller 在上文 一 中介紹了借助pythoncreator,從種子位址出發,經過beautifulsoup分析網頁和urllib2的post request獲...

FME如何採集肯德基中國的所有門店位址(三)

fme如何採集肯德基中國的所有門店位址 一 問題分析 fme如何採集肯德基中國的所有門店位址 二 python httpcaller獲取門店json json分析 前面步驟獲取到肯德基店面資訊的json資訊串,用notepad 的jsonviewer分析,結構如下 關鍵資訊在table1裡,有sto...

獻給所有想學習正則和採集的朋友

function get url content url method c 我們用智慧型方式定義header頭倍資訊.foreach getallheaders as key val 虛擬來路.經過修正,基本上,來路也是那個站,主機也是url站點.header array trim str 下面僅僅...