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

news/2025/2/1 17:02:28/

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


http://www.ppmy.cn/news/967531.html

相关文章

KFC点餐收银系统

KFC点餐收银系统 同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C/python/Java,结合设计模式(2种以上)至少实现系统的以下功能: 1.正常餐品结算和找零。…

E. Eggfruit Cake

题意: 给一个首尾相连的字符串,求有多少区间长度不大于 s s s 且至少有一个字符 e e e。 对于每一个位置,一共有 p o s s poss poss 种选取方法,对于他选取的这个区间里面只有他后面最近的那个 e e e 位置之后的 e e e 的位…

贝店要怎么进去买东西?贝店邀请码18497848

贝店要怎么进去买东西?贝店邀请码18497848? 最近好多人问我贝店是什么?怎么开贝店?邀请码是多少?今天贝店珍儿邀请码:18497848,就给大家讲解一下贝店是怎么回事? 随着互联网得不断发展,网上购…

假的肯德基活动链接的分析

前提 今天同事分享了一个肯德基活动的链接,一开始从聊天消息上是看不出来差别的,如下 手机打开后,通过程序员的直觉感觉不像真的,就仔细观察下页面设计,发现了猫腻,正常的 公众号文章不是应该可以点击进去关…

肯德基、必胜客中国部分餐厅限时推出植物肉汉堡;B站与《男人装》首次破圈合作 | 美通企业日报...

今日看点 百胜中国在指定的肯德基,必胜客和塔可贝尔餐厅推出新品别样汉堡。百胜中国控股有限公司宣布与植物肉业界公司别样肉客合作,将于6月3日开始在中国肯德基,必胜客和塔可贝尔的指定餐厅限时推出别样汉堡(Beyond Burger)。以植物蛋白为原…

肯德基管理系统

一个肯德基管理系统,加强设计模式简单工厂,装饰模式训练,本次作业完成一个肯德基管理系统,提供三种汉堡,一种炸鸡,一种可乐,用简单工厂和装饰模式来设计实现,首先建立一个food 类,里面有三个参数,实物名称,实物价格,实物个数,提供相应的set,get方法和构造函数,并…

麦当劳点餐结账页面

功能 传数据 父组件的参数传给子组件 得到 渲染 分页复选框的是否选中 element-ui的事件和属性动态数据响应 vuex 实现: 使用element-plus的Tabs标签页 用到的Tabs的事件: 事件名说明回调参数tab-clicktab 被选中时触发(pane: TabsPaneContex…

KFC点餐简单系统

题目要求: 同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C或Java或Python结合设计模式(2种以上)至少实现系统的以下功能: 1.正常餐品结算和找…