分享

PQ- 综合实战:用Excel批量获取百度搜索结果——这感觉真是“爽”!

 大海_Power 2021-05-22

小勤:我这里有一堆的地址,能不能知道哪些是医院,哪些不是?

大海:呵呵,你自己看着这些地址能看得出来吗?

小勤:当然不能啊,上面又没写着医院两个字。只能一个个百度……

大海:那我们就让Excel自己去自动百度呗。

小勤:啊!这也行!

大海:Power Query不是可以做爬虫吗?专治这种批量累人活儿。

Step-01:获取地址数据到PQ

Step-02:添加自定义列,用百度搜索引擎对地址进行搜索(返回第一页,一般10-15条),这个函数非常简单,就是用Web.Contents读取网页内容。公式:Web.Contents("http://www./s?wd="&[地址])

Step-03:添加自定义列,将百度搜索返回结果中的内容转为一行行的文本,公式:Lines.FromBinary([百度])

Step-04:展开读取的内容

Step-05:筛选其中的结果文字(通过Web.Contents读取的是整个网页的html源代码,通过观察,发现返回结果的题纲文字部分均包含在<em>标签中——学会找规律很重要。

Step-06:判断搜索结果中是否包含有“医院”字样,公式:

if Text.Contains([读取百度结果内容到每一行],"医院")

 then "医院"

 else "非医院"

Step-07:基于“地址”和“是否医院”列删除重复项

Step-08:结果上载(可按需要删除不必要的列)

小勤:这太牛了!居然可以直接连到百度去批量搜索!

大海:对的。不过即使这样,上面搜索出来的结果也要再人工校对一下,因为这种判断条件比较简单,比如其中的“北京东城区……”那个,有的地方就没有医院2个字。

小勤:啊,不过这已经很好了——咦!我刷新的时候怎么出错了?

大海:你没上网吧!

小勤:晕!刚网断了!对了,或者是不是可以换个思路,接受再宽泛一点儿条件——只要返回第一页数据里有医院2个字的,就都算作医院就是了。

大海:那你可以尝试再改进一下,比如先分组合并一下各个地址的返回结果,然后再判断一下,还记得那个合并同类项的文章吗?

小勤:嗯,记得。先分组,然后修改代码用Text.Combine函数合并内容。

大海:对。另外,如果你确定这种方式得到的结果就已经满足要求的话,你可以将几个步骤用到的函数结合到一起,这样避免中间的数据展开等过程,速度应该会快一些。我在案例数据文件里也写了一个,你先试一下,有需要的话也可以去参考一下。

小勤:好!我试试。



    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章