接受一个新闻app的活儿,做的事爬虫工作。有在今日头条朋友介绍下别的家的爬虫怎样实现数据清洗的吗?

泻药。我不是头条的人,面试头条也被拒了。内容多出的符号如果不是原内容就有的,那可能是编码问题。解决方案只能根据各个页面编写特定清洗规则。为了提高可拓展性和代码通用性,这个时候各种设计模式就派上用场了。坐等经验丰富的开发者回答。
■网友
【接受一个新闻app的活儿,做的事爬虫工作。有在今日头条朋友介绍下别的家的爬虫怎样实现数据清洗的吗?】 爬虫和数据清洗属于两个不同的阶段,一般来说,如果爬取的过程中因为技术不过关,采集到无关内容之后一定是需要清洗的,比如采集到html代码,js代码,乱码等。这个问题最好在采集阶段解决,因为数据如果包含杂质,而且杂质没有统一的规律,那么清洗工作就非常难做。因此,在采集阶段对数据进行处理最佳,推荐题主用八爪鱼采集器来做,因此八爪鱼在采集的时候会自动保证采集下来的数据和用户在网页上阅读的数据100%一致,完全不会包含杂质,也就免了清洗的工作。

■网友
不是今日头条的,不过强答一下。
当你发出请求,希望马上得到完整的合规的数据,但很遗憾,现实世界根本不是这样的,现实世界是,你发出了请求,但是网站可能宕机了根本不回应你,也可能是一开始回应你但看你爬的太快之后就不回应你了,或者给你返回的残缺的数据,或者不是标准HTML,或者存在编码问题,或者该转义的没转义结果造成数据的畸形,这些都是可能的,所以,人们常说,数据清洗是一门体力活。
我跟各种畸形数据斗争了很长时间,Xpath,或是CSS Selector是不胜任干这些事情的,因为它们需要页面数据必须符合HTML规范,但是网页布局经常发生改变,废了很大劲定义好的规则不久就会失效。我也尝试使用了一些fuzzy 字符串算法,但是这些算法无法借助于html中的tag来降低待搜索区间,导致效率很低。
我最近使用的scrapely库,目前看起来不错,scrapely使用IBL算法,核心的思路是,用户首先标识出他关注的html Element,然后IBL记录下这个Element的前k个Element的标签 和后k个Element的标签,形成一个模糊匹配序列,然后,当对带有各种缺陷的页面进行匹配的时候,就找到页面中多个匹配序列,其中最长的那个就是最终匹配结果。k一般在4~10之间,k太小,会出现误报,k太大效率会降低。
我使用一段时间以来,IBL算法表现很好,对于各种残缺页面都能做到很好的处理,而且性能也不错。在这里推荐给你,希望对你能有所帮助。

■网友
谢邀。以前做过一些论坛,小说,题库的爬取。也遇到你所说的问题。目标题库或小说网站目测显示正常,但爬取了后发现一些乱码,一些广告,一些乱七八糟的东西。后来发现是网页注释内容或者是在一些隐藏标签内的内容。这样人看是看不到的,但程序都会爬取。后来就用了一些第三方控件,加载网页内容,然后获取指定目标div内的innerText。这样最后再把回车换成转成\u0026lt;br/\u0026gt;

■网友
解决方案几个人都给了,我的建议就是要在数据搜集阶段就要做好数据清洗,否则的话工作量会很大。


    推荐阅读