FME如何采集肯德基中国的所有门店地址(二)

2016-09-09 11:34:49

作者:雷中华

参考上文:FME如何采集肯德基中国的所有门店地址(一)

PythonCreator与PythonCaller

在上文(一)中介绍了借助PythonCreator,从种子地址出发,经过BeautifulSoup分析网页和urllib2的Post
Request获取肯德基门店名称、地址、特色服务的Json串。这里,把PythonCreator

①PythonScript,此处无差异。两个函数都可以在fme自带的编辑器里撰写脚本。

脚本略去,基本是把上一篇文章里的Post部分拆到PythonCaller里去。

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生效。

HttpCaller

上面的尝试中,把PythonCreator在Post
Request部分拆解到PythonCaller里去,同理,这个环节Httpcaller也能很好地胜任。

那么此时,HttpCaller是如何设置呢?

HttpCaller真正能体现FME无代码、搭积木式完成任务的优秀能力!

那么此时,HttpCaller是如何设置呢?

HttpCaller真正能体现FME无代码、搭积木式完成任务的优秀能力!

①post
request的目的地,由上一篇文章可知,这个url一般是通过httpfox分析得来;

②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来等待,从而降频。

猜你喜欢

转载自blog.csdn.net/fmechina/article/details/81389231
今日推荐