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

2021-08-22 04:45:29 字數 2340 閱讀 2251

2016-09-09 11:34:49

參考上文:fme如何採集肯德基中國的所有門店位址(一)

pythoncreator

與pythoncaller

在上文(一)中介紹了借助pythoncreator,從種子位址出發,經過beautifulsoup分析網頁和urllib2的post

request獲取肯德基門店名稱、位址、特色服務的json串。這裡,把pythoncreator

①pythonscript,此處無差異。兩個函式都可以在fme自帶的編輯器裡撰寫指令碼。

pythoncreator

實現解析種子位址,分離出全國有肯德基店面的城市;

pythoncaller

來post獲取城市具體的門店清單json

在兩者的python指令碼中,

使用feature.getattribute("fieldname")來獲取要素的屬性值;

通過feature.setattribute("fieldname","value")來給字段賦值。

②不難發現,這裡兩個函式是有明顯差異的。

pythoncreator只能使用類(class)

pythoncaller可以使用類(class)也可以使用函式(function),注意函式本來有feature引數,使用的時候,可以略去,僅在此處填函式名

③暴露屬性,這個兩者是一樣的。只是pythoncaller多了隱藏屬性、隱藏list選項

④昨天說過,pythoncreator只有輸出沒有輸入,適合作為整個轉換器的入口;pythoncaller有輸入有輸出,適合在中間用。

tips

由於本文需要使用fmeobjects和bs4以及urllib等幾個函式包,fmeobjects在fme下,bs4等外部的包一般是在其他地方。這裡,可以通過fme

option來設定python解析器以及通過start up python

script來追加相關包路徑,來實現多個內外部包同時在乙個workbench生效。

上面的嘗試中,把pythoncreator在post

request部分拆解到pythoncaller裡去,同理,這個環節httpcaller也能很好地勝任。

那麼此時,httpcaller是如何設定呢?

httpcaller真正能體現fme無**、搭積木式完成任務的優秀能力!

那麼此時,httpcaller是如何設定呢?

httpcaller真正能體現fme無**、搭積木式完成任務的優秀能力!

②http方法,此處是post,就是需要提交一些引數給目標url,從伺服器返回一些結果來。用post還是get,也可以從httpfox看出來;

③post的引數以及值,引數名參見httpfox分析結果,值有固定部分,也有變數。變數支援直接使用feature的某個字段值;

④標頭檔案,為了欺騙伺服器,所以post經常需要「偽造」成正常的訪問,可以經由header來實現,比如設定user-agent等;

⑤訪問網頁的返回值,可以選擇存到屬性裡,也可以選擇存到實體的檔案(file)中去。

tips

伺服器最怕高頻持續訪問,所以反爬蟲中乙個基礎的策略就是監控單ip訪問頻次來做限制。那麼pythonscript或者httpcaller中可以做響應對策。

tips1,script中,用random.random()*

5來生成隨機數,然後time.sleep() 來等待這個時間,降低頻率;

tips2,fme

workbench中,借助randomnumbergenerator函式生成隨機數,借助decelerator來等待,從而降頻。

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

fme是個優秀的平台,並保持快速且持續的增長 更多的函式模組 更多的輸入輸出格式支援。python是膠水語言,最大的特點就是擴充套件模組豐富,與fme一拍即合。一方面,fme借助pythoncaller實現了平台承載功能的擴充套件,在fme裡嵌入python,融合其他it技術,彰顯fme的平台特性 ...

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 下面僅僅...