仅仅 current.vc 这个网站的项目,这里写好文档对网站的抓取分析。
1.chinavc
原本以为 newsChannlid 已经被我找完了,实际上还有很多。但是,我仔细看了一下网站的首页,分析了 AJAX,得到未必需要全部的 newsChannlid。
找到标题的对应关系了,上面有 8 个对应的栏目,下面有按照顺序的 8 个对应的 AJAX 请求。
//网站的栏目数组
$column = array(
'11'=>'VC/PE',
'3'=>'瞰三板',
'20'=>'产业资本',
'14'=>'锐公司',
'5'=>'金融',
'4'=>'潮讯Hot',
'23'=>'人物',
'2'=>'原创'
);
分析网站的 URL 链接:
https://www.chinaventure.com.cn/cmsmodel/news/detail/312533.shtml
https://www.chinaventure.com.cn/cmsmodel/report/detail/1277.shtml
目前从 URL 上面看,能抓取的数据是 news 和 report,report 目前没有抓取的必要,所以只抓取 news 的数据了。
2. 36kr
36kr 网站上的 URL 分析与上面的 chinavc 栏目分析是基本相同的。
//网站的栏目数组
$column = array(
'23'=>'明星公司',
'104'=>'行业新闻',
'67'=>'早期项目',
'70'=>'深度报道',
'103'=>'技能GET',
'71'=>'行业研究'
);
3. 如何测试
通过 URL 进行测试,可以用来测试的 URL 链接如下:
http://daily.me.com/?/scrape/index/chinavc/
http://daily.me.com/?/scrape/index/pencil/
http://daily.me.com/?/scrape/index/GPLP/
http://daily.me.com/?/scrape/index/36kr/
http://daily.me.com/?/scrape/index/pedaily/pe/
http://daily.me.com/?/scrape/index/pedaily/news/
http://daily.me.com/?/scrape/index/pedaily/people/
如果上面的每个 URL 都能返回正确的消息,基本就完全测试完全了。
4. 整合出栏目
目前,先用这里的作为测试。
5. 目前的困难
目前我的困难在于思路的不清晰,思路一但乱了,程序也就写不下去了。现在的思路还是分模块的进行测试。先从比较简单点的 36kr 网站开始。
测试的 URL: http://daily.me.com/?/scrape/index/36kr/
6. 通过 URL 传递参数
在我们的系统中,甚至微信公众平台的开发中,通过 URL 来传递参数成为了一种通用的做法。通过 seg () 函数获取参数,通过 URL 在控制器和视图层之间传递 URL 参数。
数据一般的处理流程,1->2->3 或者 1->2->5 或者 1->2->3->4->5 这样的三个流程。
1->2->3:是显示索引(栏目索引)
1->2->5:直接点击了文章索引,点击出了文章信息
1->2->3->4->5:是点击出栏目,出现索引,索引出现后又点击文章信息
如果又要加上分页,越来越复杂了。
分页这个功能加在什么地方?
7. 发现铅笔道这个项目难度
https://www.pencilnews.cn/deep 这个项目有难度。
分析获取的 JSON 数据。
{
"code": 1000,
"message": "SUCCESS",
"data": {
"items": [
{
"user_contact_id": "8377",
"article_id": "13919",
"uid": "106139",
"contact_uid": "109954",
"reason": "",
"create_at": "2017-05-07 16:26:49",
"contactU": {
"uid": "109954",
"name": "李晟博",
"sex": "0",
"avatar": null,
"cert": {
"uid": "109954",
"state": "1",
"cert_type": "1",
"com": "山丘",
"job": "创始人",
"charge": null,
"card": "提交人:玛依热",
"create_at": "2017-05-06 23:08:15",
"update_at": "2017-05-06 23:08:15",
"op_uid": "101370",
"reason": null,
"show_barrage": "1",
"revise_reason": "0"
}
},
"u": {
"uid": "106139",
"name": "闫久领",
"sex": "0",
"avatar": null,
"cert": {
"uid": "106139",
"state": "1",
"cert_type": "2",
"com": "众筹客",
"job": "投资总监",
"charge": "负责互联网消费类,人工智能机器,连锁实体品牌领域投资",
"card": "users/card/7be9f234f2dc2b716b263dc3d73822d81490165872.jpg",
"create_at": "2017-03-22 14:59:49",
"update_at": "2017-03-22 15:36:33",
"op_uid": "100041",
"reason": null,
"show_barrage": "1",
"revise_reason": "0"
}
}
}
]
}
}
上面的信息是联系人的信息,没有什么关系的,抓取网站不是从这里抓取的。
8. 总结
现在看这个项目,是比较简单的。36kr、chinavc、pencil 都是利用抓包的方式抓取的。GPLP、pedaily 都是比较传统类型的网站,按照套路来抓取就可以了。如果抓包的方式,写两个函数。如果比较传统类型的网站,都是基本的 4 个函数。