小勤:我這里有一堆的地址,能不能知道哪些是醫(yī)院,哪些不是?大海:呵呵,你自己看著這些地址能看得出來嗎? 小勤:當(dāng)然不能啊,上面又沒寫著醫(yī)院兩個字。只能一個個百度…… 大海:那我們就讓Excel自己去自動百度唄。 小勤:??!這也行! 大海:Power Query不是可以做爬蟲嗎?專治這種批量累人活兒。 Step-01:獲取地址數(shù)據(jù)到PQ Step-02:添加自定義列,用百度搜索引擎對地址進(jìn)行搜索(返回第一頁,一般10-15條),這個函數(shù)非常簡單,就是用Web.Contents讀取網(wǎng)頁內(nèi)容。公式:Web.Contents("http://www./s?wd="&[地址]) Step-03:添加自定義列,將百度搜索返回結(jié)果中的內(nèi)容轉(zhuǎn)為一行行的文本,公式:Lines.FromBinary([百度]) Step-04:展開讀取的內(nèi)容 Step-05:篩選其中的結(jié)果文字(通過Web.Contents讀取的是整個網(wǎng)頁的html源代碼,通過觀察,發(fā)現(xiàn)返回結(jié)果的題綱文字部分均包含在<em>標(biāo)簽中——學(xué)會找規(guī)律很重要。) Step-06:判斷搜索結(jié)果中是否包含有“醫(yī)院”字樣,公式: if Text.Contains([讀取百度結(jié)果內(nèi)容到每一行],"醫(yī)院") then "醫(yī)院" else "非醫(yī)院" Step-07:基于“地址”和“是否醫(yī)院”列刪除重復(fù)項(xiàng) Step-08:結(jié)果上載(可按需要刪除不必要的列) 小勤:這太牛了!居然可以直接連到百度去批量搜索! 大海:對的。不過即使這樣,上面搜索出來的結(jié)果也要再人工校對一下,因?yàn)檫@種判斷條件比較簡單,比如其中的“北京東城區(qū)……”那個,有的地方就沒有醫(yī)院2個字。 小勤:啊,不過這已經(jīng)很好了——咦!我刷新的時候怎么出錯了? 大海:你沒上網(wǎng)吧! 小勤:暈!剛網(wǎng)斷了!對了,或者是不是可以換個思路,接受再寬泛一點(diǎn)兒條件——只要返回第一頁數(shù)據(jù)里有醫(yī)院2個字的,就都算作醫(yī)院就是了。 大海:那你可以嘗試再改進(jìn)一下,比如先分組合并一下各個地址的返回結(jié)果,然后再判斷一下,還記得那個合并同類項(xiàng)的文章嗎? 小勤:嗯,記得。先分組,然后修改代碼用Text.Combine函數(shù)合并內(nèi)容。 大海:對。另外,如果你確定這種方式得到的結(jié)果就已經(jīng)滿足要求的話,你可以將幾個步驟用到的函數(shù)結(jié)合到一起,這樣避免中間的數(shù)據(jù)展開等過程,速度應(yīng)該會快一些。我在案例數(shù)據(jù)文件里也寫了一個,你先試一下,有需要的話也可以去參考一下。 小勤:好!我試試。 |
|