我们已经准备好了,你呢?

2026我们与您携手共赢,为您的企业形象保驾护航!

物质水平的提升使得旅游日益受到关注,国庆长假刚刚落幕,趁着这股热潮,许多人或许都在好奇,大家通常会选择去哪里度假。为此,我耗时仅10分钟便开发了一个专门收集马蜂窝游记的小程序,而这般迅速的成果,离不开PHP知名爬虫框架的强大支持。

国际惯例,我们先来看看代码怎么写,算作抛砖引玉吧 ^_^

马蜂窝网站与一般网站不同,它面临高并发量的挑战,并且某些关键数据需要即时更新,例如观看人数和点赞人数。因此,该网站在多个地方采用了Ajax技术。然而,对于普通的采集者而言,Ajax技术构成了一个较大的难题。

观察了一下马蜂窝网站,最终确定了采集路线:

获取热门城市的列表,然后根据这些城市获取相应的游记列表,接着查看游记的具体内容,从中提取游记的标题、所在城市以及出发日期等信息,我们将通过以下三个步骤来完成这一操作。

1、获取热门城市

首先我们要采集下这些热门城市

点击页码时,我们注意到其数据是通过Ajax技术动态加载的;末页编号为297,并且采用了POST请求方式。

提交的参数如下:

显而易见,这里的“page”指的是页码,存在一个疑问,即虽然框架具备URL去重功能,对于POST请求而言,其URL是唯一的,但这并不会对POST传输的数据造成影响。因此,我们可以在URL后添加参数“?page=1|2|3...”,据此,我们的代码可以这样编写:

设置列表页规则:

''=> array( "\?page=\d+", )

在入口回调函数入口所有城市列表:

对于Ajax分页的最后一页,它是第297页,循环从0开始到某个数,每次循环中,构建一个URL,设置为POST方式,并将'mddid'设为21536,'page'设为当前循环的索引i,然后将这个URL加入队列;接着,使用这个URL和另一个参数调用函数。

点击进入一个城市后,我们可以看到他下面的游记列表

自然,这同样是通过Ajax技术实现的加载方式,我们只需打开浏览器中的开发者工具,进行点击操作,之后任意点击一个分页,便可以获取到对应的Ajax请求链接。

和城市列表一样,也是POST,参数如下:

显而易见,page指的是页码,自然地,我们可以通过POST请求直接访问Ajax的地址:

是直接报错的,他需要来路,综合以上,我们代码可以这么来写:

首先我们要在 回调函数里面加上来路URL

$-> =($) { $->('',''); };

和上面获取城市列表一样,设置列表匹配规则:

不允许对特定内容进行修改,且需确保移动设备识别码的格式正确,即以“&”符号连接的“act”和“mddid”参数,其中“mddid”后面跟随一个数字。

在回调函数中,若确认当前为首页,则需查询总页数信息,并依次将其加入队列中。

使用正则表达式提取页数信息,然后循环遍历每一页,构造游记列表页的URL,并添加到队列中。具体操作如下:初始化循环变量i为0,当i小于等于总页数时,执行以下步骤:将URL、请求方式、参数数组(包含mddid、空字符串、排序方式、费用、天数、月份、标签ID、当前页码等)传递给函数,将生成的URL和队列操作符作为参数调用函数,将URL加入队列。

经过前两个阶段的操作,我们已将各大热门城市的游记清单悉数纳入队列之中,紧接着,我们将迈入第三阶段,即从这些清单中抓取具体内容页的网址,并从中提取所需信息。

3、获取热门城市下的游记列表

在具体方法中,我们能够获取到列表页的详细信息,通过这些信息,我们能够进一步提取出内容页的网址。

提取内容页面信息,将('##', $html, $out)进行处理;若输出结果非空,则对输出结果进行遍历;将每个遍历到的值$v作为内容页URL,存储为"{$v}.html";并将该URL加入队列。

接下来我们来配置field提取内容页字段

标题 => 数组,其中包含:名称字段(name),以及一个注释字段(//h1)。

(@class,'')

禁止对特定内容进行修改,确保分类数组中的'name'键对应的值为'city',且不包含注释标记,具体表现为:分类数组包含一个元素,其键为'name',值为'city',不带有任何注释内容。

(@class,'')

禁止对特定内容进行修改,确保其真实性,相关数据如下:出发日期信息,名称为“date”,格式保持原样。

(@class,'time')

", ''=>true, ), )

设计一张数据表:

自然,我们能够了解到游记的阅读次数、收藏数、转发量、置顶状态以及游玩消费金额等众多信息,种类繁多,获取方式也大致相同。

程序设计至此告一段落,整体代码量不足200行,得益于其内置的多进程数据采集功能,数据收集过程迅速高效,最终累计达到了七万多个数据点。

得到这些数据以后,我们能干什么呢?!

Top10 旅游城市分别是

显而易见,云南堪称佳境,更是博主心中日夜萦绕、深切思念的所在啊。

五一和国庆期间旅游城市占比

五一期间众人偏爱前往西藏游玩,而国庆节时则更倾向于青岛,唉,不过遗憾的是,博主本人并未踏足这两个地方,心里难免有些失落~_~!

接下来我们来看看这一年来北京和杭州的旅游旺季

观察发现,在七八月份前往北京旅游的人数显著增加,那时北京的气候宜人,既不炎热也不寒冷,博主曾记得自己有一次在八月份前往北京,那感觉真是舒爽至极,非常惬意。

我们再来看看杭州

三月末至四月上旬无疑是杭州旅游的最佳时节,春意盎然,花儿竞相绽放,气候宜人,据悉,太子湾公园在那段时间会举办盛大的樱花与郁金花展,景色迷人至极,看来我的旅游瘾又犯了~_~!

文章内容至此告一段落,实则心中尚有许多分析欲,诸如搜集热门旅游线路、著名景点、精选图集以及旅游线路的价格信息,期望最终能打造出一个旅游应用程序。若各位读者有独到见解,欢迎分享,我将一一收集,以供众人参考。^_^

最后,对源代码感兴趣的同学可以上搜索哈 ^_^

爬虫工具,DDOC系统,提供分布式动态代理IP服务,确保IP代理的高品质,覆盖全国范围内的匿名代理IP,适用于爬虫代理需求,供应私密型代理IP,支持国内快速代理服务,精选优质代理IP资源。

二维码
扫一扫在手机端查看

本文链接:https://by928.com/10246.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线