最近完成的一个工作是要抓取某公司的合作伙伴信息,跟上一次的区别在于,这个公司调用了Salesforce之类的第三方CRM服务。合作伙伴的详细信息是需要点开对应的连接之后才可以获得。
分析
毫无疑问,这次的工作难度高了很多。不过还是遵循一样的思路——获取,整理,导入。
获取
首先解决获取问题,不难发现每一个合作伙伴的对应详细信息网址都是有规律的,通过传入一个类似于id的参数来获得,也就是说问题转换成如何获取所有合作伙伴的id。通过分析HTML代码可以发现(在F12中查看,而不是直接查看源代码),id出现的位置都有着相当的特征,通过正则即可提取。 得到id之后,就可以模仿着构造出对应的请求链接。得到请求链接之后,就可以用各种网络库来下载相关网页了。这一次,我使用了简单粗暴的curl。
整理
得到了包含联系方式的文件,我需要从中提取出我需要的信息,自然想到了正则。但是经过多次试错之后发现,正则并不能完美实现我的需求,总是存在部分疏漏。有数据量较大,冗余文本过多,我无法一一排查正则表达式何处出错,故不得不放弃了这一方案。最后实现的思路是通过C++编写相关代码,搜索联系方式前后出现的特征串(比如电话
或Phone
之类)。
导入
数据的导入仍然是通过Excel打开文本的形式导入,不过要处理好号码粘连在一起的部分条目。比如说:开头数字相近的长度为在7到8之间的串,以及一个1开头的长度为11的串。这些处理完毕之后,记得统一一下字体及字号,照顾一下阅读这些数据的人的感受~
方案
适用范围
- 多页(链接有规律)
- 批量
- 规则数据
工具
- Chrome
- curl
- Sublime Text 3(支持正则表达式)
- Clion
- Excel 2016
流程
- 使用Chrome获得包含合作伙伴id的HTML代码
- 使用正则获取对应id并构造请求链接
- 使用curl下载对应的HTML
- 使用正则提取合作伙伴的联系方式
- 整理之后导入Excel
坑点
想当然的使用正则
正则强大是强大,但是如果自己在不了解具体的数据构成方式的时候,错误的随意的使用正则,往往只能得到错误的结果。为了这个坑,我调试了大概有两个小时,铭记在心。
总结
这次工作娴熟了很多,对这一类问题已经有了比较系统的思路,区别仅仅是在于如何针对特定的规则改变自己使用工具的方式而已。
更新日志
- 2015年09月24日 完成初稿