说一说,这段事件做一个爬虫外包项目的糟心事儿。

2016-01-10 08:23:15 +08:00
 besttime
事情是这样的。
上个月在 csto 上接了一个爬虫的外包项目。发包方要求爬取 58 和赶集的,所有城市的所有分类数据。
2016 年 1 月 3 日,首次完成计划时,我便向发包方提交了源代码以及开发文档。
发包方经测试后程序的几项功能实现的方式与他的需求不符。(主要在于对抓取数据的选择,以及监控这两个功能上。我的想法是在数据库提取数据这个层面上进行实现,主程序只管抓取,以保证数据的完整性。发包方希望在程序内部进行实现。)我接受发包方的修改意见,并熬夜进行源代码的修改。加入了数据选择的功能。
第二天,发包方又以需要选择多线程的线程数量为由,需要修改代码。(原始项目需求并没有多线程这一项,是我作为开发者的良知,希望程序运行效率高才加入的。)我也尽力的满足发包方的需求连夜进行了修改。
后来,发包方又以监控模块不能很好的满足他的需求要求重构监控模块。而后,我又秉承满足发包方的任何需要,连着熬了几晚,进行了监控模块的重构。(这个功能本来有一定的不稳定性,发包方希望抓取数据与数据库的数据进行对比,并识别是否有新的数据。但是,抓取对象给的数据是不稳定的,这造成了此功能的不稳定性,发包方一直不满意。)
因为,后续修改的代码,发包方经常催促。程序的测试不够充分,运行时会有报错。一旦发现报错,我也马上找出原因,并修改错误。但,发包方经常以此为由,对我进行开发实力上的否定。
现在项目支付期限到期前一天,发包方提出了修改成果的申请。我积极的在 qq 上询问发包方程序哪里还有不满意之处。并承诺,在可行的范围内,一定配合他的想法对程序进行修改,但一直得不到发包方的回复。
请大家帮忙分析下,我接下来该怎么办?


这里补上一封我给发包方发的 emial ,算是我对事件详细过程的描述以及吐槽。


既然项目的进程已经发展到了这个地步,很多事儿我也就不在忍着去做了,有些话还是跟你敞开了说了的好。可能有些地方言语有些激烈,但是我实在是忍了很久了。很多东西,对你有益,听得进去就听。听不进去就算了。
首先来说一下,这几天你一直纠结的监控模块。不得不说这其实是极为愚蠢的做法。监控新数据无论怎么去实现,都要重新的爬一次目标网站的。主程序爬取一次数据,还要监控程序再爬取一次?呵呵,在我看来爬一次都是风险非常大的事情,毕竟你是整站爬取啊。一次的爬取请求量都是极为大了的。你真的以为目标网站的运维都是吃干饭的?我来告诉你对于这种异常的大流量请求连接对方会怎么做。首先判断你的意图(一般都是爬取数据嘛,别人心里也是有数的。),然后非但不限制你的流量,反而会让你爬取数据畅通无阻,然后在给你的数据里掺杂一些特定的字符,然后通过这些特定字符找到你的网站,通过你的网站查询你的服务器所在地,域名备案信息。然后收集你的爬取服务器数据。最后就直接提交目标网站的司法部门,走司法程序了。到时候我相信你哭都哭不出来(毕竟爬这种大范围的爬取说穿了就是偷别人的数据呗。)。
其次,我来说一下从首次提交源代码你所要求的更改。
第一次,你说要要有抓取数据选择的功能,恩,说实话这个我觉得还有一点用处,毕竟重点的城市,自定义的多抓取几次,多获取一些定点的数据也是能够理解,之前我想的是先抓取全部的数据,以保证数据的完整性,然后这个功能由数据库提取数据层面上进行解决。但是,你有没有考虑自动化的问题?你是打算每天自己控制爬取一遍数据再提交到服务器给你的用户展示?你要是这么想的我只能给你点个赞了。恩,既然你有需要,我也只能尽力去实现,二话不说,熬个通宵把你的抓取数据选择给做出来了。
第二次,你说要能够选择多线程的抓取数量,我也就呵呵了,我还就先不说你一开始都没说过要多线程,还是我想程序有好的效率给你加上去了。你就不能上次一块儿说了?非得我把一个地方弄好了,然后提出一个新的需要?也行吧,毕竟你是甲方嘛,有需求我是应该尽力的完成,然后我就熬夜重构了多线程的模块。重构你懂吗?所有的东西都删掉重新写。又是一夜熬到第二天早上十点你懂吗?
第三次,恩,多线程弄好了,然后你又说这个监测模块没有啊。我之前说,数据库是去重的,能够写入数据库的就是新的数据,这样也可以当做监测新数据的方式,你也不置可否,现在又来说这个。我也就呵呵呵了,您就不能一次性把这些一起说完啊?你一说就是有十年的 c++编程经验。你不知道一个模块的增加删改程序的其他地方都是要跟着改的嘛?你不一次性说完,每次新的问题我都要改很多地方的好嘛?这也就不说了,甲方有需要嘛,烟茶备好,又是一个通宵。
第四次,恩,监控模块整出来了,但是你那边一运行就报错,然后就是我编程实力有问题,我菜。是啊,我怎么这么菜呢?一晚上把构建,编码,调试,测试都做了,竟然还会有报错,我怎么这么菜呢?后来边调边测,代码运行没问题了,你又说,小伙子啊,你这个实现的不怎么好啊,没有达到我的预计目标啊。我说要根据日期监测,你怎么弄个根据页面位置的 url 监测啊。我也是呵呵哒了,网站同一天的日期都是 2016-01-08 ,这样监测的还有什么意义?你今天爬取了,数据库里有今天的数据肯定就不能识别啊,那你爬取之后的的同一天发布的数据就不是新数据咯?算了,你这甲方嘛,你既然都这么要求了。我就按你的要求来吧。
第五次,那天是凌晨 4 点跟你沟通晚,然后当晚没睡,重构监测模块到第二天下午 6 点。因为目标网站时间格式极为混乱,什么 xxxx-xx-xx 啊,什么 xx-xx 啊,什么 x 天前啊,什么 xxxx.xx.xx 啊都有,我需要足够多的尝试给这些混乱的时间格式编码,让其能准确无误的转换为时间戳,然后进行比较,取最大输出。期间你一直在催,这么还没有搞好,是不是做不出来啊?呵呵。午 5 点多,提交代码。在你那边运行有报错,你就说我这人是怎么,把你当成测试了嘛?为什么不测试好再发给你。是啊,我这么不测试好呢?我连熬二十多个小时的时间都是喂狗了?呵呵达,检查发现报错原因原来是读取数据库的时间参数后,因为数据库的时间参数是带中括号的,然后 time 库并不能把带中括号的参数转换成时间戳。之前是你说要把写入数据库的数据的括号给去了的。现在因为这个报错就是我的程序设计不稳健,实现没有判断是否有中括号咯?
恩,代码改了 5 次,最后终于看起来没什么问题了,在没有跟我说哪里有问题的情况下,直接再 csto 平台申请项目成果修改,理由是项目成果存在重要的问题,需要给时间我去解决,呵呵呵呵哒。
然后,我想着毕竟你是甲方嘛,尽量多去沟通,再 qq 上捏着鼻子问你,是不是还有什么其他问题。要是有的话,我尽力再可行性的范围内配合你进行解决。你倒好,一个字不回了。我也就没办法了,申请项目到争议期咯。
我先不说你说你有着十年的 c++开发经验。但是,任何的 it 常识都没有,分布式不知道, vps 不知道,任何报错都要问我来解决问题,连终端提示 sql 语句不存在都看不出来。你说我菜,你知不知道你打算要用的网站有多菜?一个 php 的简单框架,看代码还是 github 上面的开源框架稍微修改一下给你做出来的。我就呵呵达了,我想着你这个项目还是有一定的特性的,都没用 scrapy 。都是我一点一点的分析目标网站,一点一点的做架构。套个框架就不菜了?早知道我也拿个框架一套,多简单,一两个星期可以搞定的事情,你还高兴。还有,你有没有看到你那网站上面的分类像什么一样堆在那里,你都不知道进行多级分类的嘛?我都给你爬取数据做了一到三级的分类,你自己的网站确是这样,怪不得你之前还说,每个分类应该是独立的,为什么数据库就只有那么七八张表。说到这里我就想起来了。光数据库我就给你解释了差不多三个小时吧。为什么要这样设计,为什么要这样分类?这些分类的数据有怎样共同的数据结构?呵呵达,这个都要问我?自己打开表看一下字段不就可以了?我还特地把表的字段大多数用拼音来表示,就是怕你看不懂。从一开始,发现你连分布式和 vps 是什么都不知道的时候我就知道你的计算机基础也就这样了。
你的项目我做了这么久,两个目标网站的代码我基本上看了个遍。我就问你一句。目标网站的代码你看过没有?我估计你是一下都没看的,你连目标网站的代码是什么样的,完全不知道各种数据是以什么样的方式存在在 HTML 里,完全不知道,各种功能的实现需要依赖目标网站的哪些特性。然后就按你想的来咯?没实现就是我菜咯?实现了不怎么稳定就是我菜到离谱咯?我说我有我的实现方式,很大的一部分原因是因为这是一个爬虫啊,朋友,爬虫不是只单单在自己机器上跑的。爬虫是需要从别人的服务器拿数据的,拿到怎么样的数据不是我能说了算的。真的不是我没测试啊,是别人给的各种数据的不稳定性太大了。毕竟我们是要依赖于别人拿数据的,过段时间网站迭代了,数据改了,我们也要接着改的。爬虫说穿了是一个数据导向性的程序,为了拿到更多跟准确的数据,其他的任何都可以为其让道的。拿到数据才是真的。
说了这么多,其中有一些是对你有益的,有一些是对开发过程的吐槽。吐槽的,你可以忽略,听的进去的就听。你也可以把这封邮件发给 csto 的协调人员。我也会把这封邮件发到我们程序员的圈子里,让广大的程序员评评理。(以上只是就事论事,没有任何隐私信息。)
最后,我还是想这个项目有一个好的结果,请放下你的偏见,放下你那 10 年 c++的经验,想一想这个项目,想通了,我们再来沟通如何解决现在的局面(当然,这个前提是你不是一开始存心就打算骗程序的。)这段时间因为你这个项目,已经严重的影响到了我的生活。所以,请自重。我程序已然基本开发完毕,若你拒不支付报酬,我会以任何合法的途径解决问题,谢谢。
14850 次点击
所在节点    程序员
58 条回复
Septembers
2016-01-10 12:47:35 +08:00
@iamaprin CC @Livid 即可
jugelizi
2016-01-10 12:59:21 +08:00
做爬虫项目很讨厌呀
后期维护太重要了
对方万一做了 ip 屏蔽呀,异常访问限制呀什么的太麻烦了
TaMud
2016-01-10 13:01:09 +08:00
那个发包方是个穷鬼,你也去理人家
以后碰到这样的人,直接一句,穷人勿扰
TaMud
2016-01-10 13:05:30 +08:00
此人我交流过,你有点脑子就知道他是个傻子
第一,他的需求不明,做过爬虫的人都知道很多东西要处理,问他的时候,一问三不知,所以他就是个需求不明的人,这样的人的项目绝对不能接
第二,他的费用跟他的需求不成正比,就说明是个不懂行情的人,说白了就是个穷人
这二项,注定这个项目就是个忽悠项目
像这样的人,宇宙有多远,就滚多远
feilaoda
2016-01-10 13:05:33 +08:00
一定要按合同,而且不做便宜的外包项目。任何需求变更都需要付费,费用多少通过协商。
远离二逼发包商,时间耗不起。
做爬虫要有自己的一套代码,然后拿来改改。
TaMud
2016-01-10 13:17:42 +08:00
做项目的原则,中间不变更,如需变更,等前期需求完全,付完全款后,再重新评估新需求,重新开项目

这样可以很有效的对付前期想用一个简单的需求引你入室,然后提高要求,想不花钱找个免费劳动力的人。
如果人家不同意这样的模式,说白了就是个骗子
wdlth
2016-01-10 13:40:54 +08:00
上面一堆 5 万 10 万的大项目,预付只有 500 ,也打上诚意项目的标签……
yangweiwei
2016-01-10 14:12:55 +08:00
个人外包是极其不靠谱的。最好有熟人介绍在先,楼主吃亏一次下次多找几个熟人。
gamexg
2016-01-10 14:22:59 +08:00
去 csto 看了一下,发现竞标中的都是几万、几十万的价格;但是已完成的就都是几百、几千的了。
表示不知道这个戏法怎么变得。
aabbccli
2016-01-10 14:39:33 +08:00
@pc10201 这个是大实话
qiaobeier
2016-01-10 15:41:56 +08:00
做私单一定要谨慎,宁缺勿滥. 最近放弃了一个合作 8 年的合作伙伴.
另外我能一直习惯 50%预付,只有 2 个国外客户不要求预付. 同样合作 5 年+ 了.
besttime
2016-01-10 20:38:26 +08:00
@woai110120130 主要是发包方的需求文档写的很笼统,比如,有一项是说需要监控数据。我的想法是通过数据是否能够写入数据库实现识别新数据的监控(数据库有去重设置,能写入的都是新数据。)理论上这样也是对项目需求的实现,但是发包方一直不满意。我也重构了两次代码,但是,按发包方的逻辑是实现上是不稳定的,然后就是死结了。
besttime
2016-01-10 20:39:42 +08:00
@Ellison 结果就是,发包方说我在这个平台的就事论事的言论,是对他的诽谤,他要起诉我哟,呵呵达。
besttime
2016-01-10 20:41:51 +08:00
@gdtv 只能根据抓取的数据尝试写入数据库,然后数据库根据某些字段进行去重设置。(时间参数肯定不能作为去重依据)。我考虑过很多种方案,只能这样进行实现,是最优的。
besttime
2016-01-10 20:44:22 +08:00
@jugelizi 我已经对 ip 限制提出了解决方案,其实很简单,弄个 vps ,让爬虫跑在 vps 上,不少 vps 都有一键切换 ip 功能,目标网站封我 ip ,我就切呗。反正 vps 便宜,实在不行多准备几个。
besttime
2016-01-10 20:46:36 +08:00
@TaMud 可能是因为该发包方经过诸如你这些人的交流,丰富了需求文档。他发给我的需求文档,其实看过去都是可以实现的。然后我问一些问题,也大多能说个所以然出来。
branchzero
2016-01-10 21:14:26 +08:00
同情,同样做了不少的定制开发项目,也都或多或少入过需求不明确被客户耍的坑。
只能说按合同办事,合同书上附上有精确语言描述的需求,要改需求? OK ,加钱。
strwei
2016-01-10 21:28:29 +08:00
做外包的话还是找点靠谱的外包网站, csto 这种我就呵呵了
besttime
2016-01-10 21:37:06 +08:00
@TaMud 个人以为,费用方面,非零开头的最小五位数已经是达到了我的心里预期的。能否告知一下这样一个项目你的心里预期是怎么样的。不方便这里说的话,可以私信我,谢谢。(其实早知道这么麻烦,翻个倍我都不做,说句矫情的话,上周,我熬到我整个人都要感觉不行了。)
besttime
2016-01-10 21:39:42 +08:00
@branchzero 谢谢你完美的描述了我的被纠结之处。就是需求不明确的问题啊,可是一开始我也无法去与发包方进行讨论,因为,这样一个项目的很多功能的实现都是要一点一点的去分析目标网站的情况而确定的。我承认,我也是没及时的把我的实现方式与发包方沟通,这个问题上我的确也是有一定责任的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/249623

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX