教您最简单粗暴的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(“%sn”,id)
这条语句中,双引号内是需要输出的内容框架,%s代表的是一个字符串型的变量,‘n’代表输出一个回车,也就是我们的输出是一个字符串并加上回车键进行分隔的形式。这个输出的框架搭好之后,我们需要对其内容进行填充,即我们在逗号之后写上id,表示变量id的内容是作为对%s的填补。
结果如下:
大家可以试着加上其他内容,也可以根据个人喜好输出的框架,例如可以用’t’(tab键)替代‘n’进行分隔。由于我们爬取时储存类型都为字符串,因此每一处信息只要用一个“%s”表示即可。
当然,循环结构也可以实现从爬1页酒店信息到爬n页酒店信息,大家可先行尝试!
- Andrew Ng机器学习课程笔记--week5(上)
- Silverlight Telerik控件学习:带CheckBox复选框的树形TreeView控件
- Andrew Ng机器学习课程笔记--week4(神经网络)
- javascript:FF/Chrome 与 IE 动态加载元素的区别
- 腾讯云发布企业级微服务中间件TSF,助企业构建亿级互联网应用架构
- java学习:字符串比较“==”与“equals”的差异及与c#的区别
- 纯C语言程序员写的编程新手入门基础小游戏之最炫酷推箱子
- Oracle BIEE (Business Intelligence) 11g 11.1.1.6.0 学习(2)RPD资料档案库创建
- Oracle BIEE (Business Intelligence) 11g 11.1.1.6.0 学习(3)创建一个简单的分析
- 请查收!这里有一封信鸽传给您的信
- Oracle BIEE (Business Intelligence) 11g 11.1.1.6.0 学习(4)创建多维钻取分析
- silverlight:RadMaskedTextBox设置MaskType="Numeric"及Mask="n"时的一个bug
- 微信里面最神秘的功能,你知道吗?
- 以大数据之名,变身!——In big data we trust
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP文件操作实例总结【文件上传、下载、分页】
- Django中Aggregation聚合的基本使用方法
- ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
- PHP反射实际应用示例
- 解决Keras使用GPU资源耗尽的问题
- 如何表示python中的相对路径
- 基于Tensorflow读取MNIST数据集时网络超时的解决方式
- python中的错误如何查看
- python实现斗地主分牌洗牌
- Python Mock模块原理及使用方法详解
- python实现猜数游戏(保存游戏记录)
- PHP实现简单计算器小程序
- PHP单例模式模拟Java Bean实现方法示例
- php实现每日签到功能
- laravel5实现微信第三方登录功能