首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

教您最简单粗暴的MATLAB入门级爬虫2

感谢吴老师的《数据新闻与网络数据挖掘》课程

感谢各位捧场的小伙伴们

本文适用对象为编程零基础者

仅供学习交流使用,请勿用于商业用途。

通过这样的方法,可以类似得到其他信息,这里编写了爬取酒店名称、经度、纬度的代码:

代码运行后,我们可以在MATLAB的Workspace窗口中,查得已经爬取的信息:

但是,在网页源代码中,星级的标注多为字符串,例如:'hotel_stars05'代表国家旅游局评定五星级,'hotel_diamond05'代表携程用户评定的5钻。若直接爬取字符串,不方便后续的处理,我们更希望得到的是代表星级的数值‘4’或‘5’。

这里我们可以用MATLAB中的字符串替换函数strrep()对其进行替换,

star=strrep(star,'hotel_diamond05','5');

它在变量star中查找'hotel_diamond05',并将'hotel_diamond05'替换为‘5’。

以此类推,将所有的字符串都进行替换,即可将酒店星级数值化:

成功提取一则酒店的信息之后,我们可以借助程序的循环结构,对第一页的酒店信息进行爬取。循环结构即设定条件,使程序在满足该条件时,循环执行相同操作。

而在爬取这一页的酒店信息时,需要循环执行的相同操作是提取每一则酒店的id、名称等信息,接下来需要寻找可以设定的循环条件。

观察之前的代码

我们将第一则信息存在info中:

info=s1(tagloc(1):tagloc(2))

而第一则信息提取后,info中的内容就不需要了,我们可以将第二则酒店的信息存入info,覆盖第一则酒店的信息:

info=s1(tagloc(2):tagloc(3))

以此类推,如果有n则酒店信息,我们需要爬取第i则信息,代码就可以写作:

info=s1(tagloc(i):tagloc(i+1))

而我们可以通过n=length(taploc),将taploc数组的长度(taploc中存的数字数量)记在n中,即‘{’位置信息的数量,这就是一页网页中的酒店数量n。

但是在这里,我们不能用n作为循环的结尾,因为若i为n(i=n)时,

info=s1(tagloc(n):tagloc(n+1))

程序出错,因为tagloc中只有n个数,tagloc(n+1)不存在。

所以比较简单的办法是:我们可以先通过循环取前n-1则的酒店信息,单独提取本页最后一则酒店的信息。将酒店信息部分的结尾作为最后一个酒店的结尾进行定位,存于tagend中:

这样,我们就可以单独读取最后一则酒店信息进行爬取:

info=s1(tagloc(n):tagend)

接下来,我们可以进行循环部分代码的编写,这里选择循环中的一种:for循环,其代码以for开始,end结束,for之后紧跟的是循环变量及其循环范围的设置,for与end之间的是需要重复执行的语句。具体代码如下,i从1开始,每执行一轮后,会自增1,直到n-1:

到这里,一页内的酒店信息我们都可以成功爬取了,这里介绍输出函数fprintf,可以实时看到结果:

fprintf(“%s\n”,id)

这条语句中,双引号内是需要输出的内容框架,%s代表的是一个字符串型的变量,‘\n’代表输出一个回车,也就是我们的输出是一个字符串并加上回车键进行分隔的形式。这个输出的框架搭好之后,我们需要对其内容进行填充,即我们在逗号之后写上id,表示变量id的内容是作为对%s的填补。

结果如下:

大家可以试着加上其他内容,也可以根据个人喜好输出的框架,例如可以用’\t’(tab键)替代‘\n’进行分隔。由于我们爬取时储存类型都为字符串,因此每一处信息只要用一个“%s”表示即可。

当然,循环结构也可以实现从爬1页酒店信息到爬n页酒店信息,大家可先行尝试!

今日总结

·寻找用于循环的条件

·实现for循环

·输出结果

下期预告

大量爬取数据并储存至文件中

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171228G0ZHQ000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券