利用Matlab正则表达式爬取网页数据

          如果我们经常需要从网上搞一些数据,如果你只会使用CTRL+C 然后CTRL+V,你就out了,假使你是搞计算机的那就更加out了,网上的数据是搭载在计算机程序上的,既然是在计算机程序上,如果我们能得到获得其相应权限,数据自然不是问题。下面就以利用Matlab来获取网页上的数据为例来简单说明一下,其他程序语言如Python也行,没试过。

      Matlab提供了urlread函数来获取网页内容,而想从网页内(好长好长的文本字符)获取想要的数据,需要使用Matlab中的正则表达式函数regexp,两个函数的具体使用内容比较多,见help吧。我以读取网页上的彩票数据为例,彩票惊讶,希望大家都能中大奖发大财大笑,我这里想获得七星彩数据。

      1、进入彩票大厅->历史开奖数据,如下图:


      2、在当前页面空白处右键单击,然后选取:查看源代码,之后会弹出如下脚本文件(这样做主要是查看正则表达式的表示格式)

  

     发现没有我们要的数据就在这里了,我们如何取出来啦,根据正则表达式的语法,我们知道类似<spanclass='ball_5'>7</span> 就是一个正则式的具体化了,其他的号码形式类似,所以在此我要找的正则式就是<spanclass='ball_5'>(/d)</span> ,在此稍作解释,这里的(/d)表示只要遇到字符串的两边的形式和模板一样,中间含有一个0-9之间的一个数字,那我们的正则式就标记一下在字符文本中的一个地方发现了有我们想要的数字了。当正则式走完整个文本后,就会获得当前文本中所有满足这样的数字,然后我们取出来数字就行了,这个看一下程序就很清楚了。

3、前面是准备工作,现在编写Matlab程序,获取数据

clc;
clear ;
tic;
%网页地址
WebSite='http://chart.cp.360.cn/kaijiang/qxc?lotId=110022&spanType=0&span=30&r=0.5169432614929974#roll_132';
[sourcefile,status]=urlread(WebSite);
%正则表达式,不同的网页不同的数据不一样的,所以要查看一下网页源码呀
expr1='<span class=''ball_5''>(\d)</span>';%expr1= '<span class='ball_5'>0</span>';
%% 正则表达式匹配,根据help文件知道:
%'match':Text of each substring that matches the pattern in expression,
%翻译过来就是 :把每一个和正则式匹配上的子字符串都存放下来
%Text of each captured token in str
%翻译过来就是 :把每一个和正则式匹配上的标记(在这里就是数字)都存放下来
%这个函数其他使用比较多,见help吧
%在此我们要的数据都是存放在data_tokens cell文件中的,他们是字符形式
[datafile,data_tokens]=regexp(sourcefile,expr1,'match','tokens');
a=data_tokens';
[m,n]=size(a);
data=zeros(m,n);
for i=1:m
    data(i)=str2double(a{i}{1});%字符转化为数字
end
%七星彩是七个数字为一组的,需要把数据重新组织一下
Data=reshape(data,7,m/7);
Data=Data';
SourceData=Data;
toc;
好了,自此我们就完成了从网页上获取数据的过程。

 


  • 7
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
MATLAB正则表达式(Regular Expressions)是一种强大的文本搜索和处理工具,可以在字符串中匹配特定的模式。 MATLAB中的正则表达式可以使用以下函数进行处理: 1. regexp:用于在字符串中查找正则表达式的匹配项,并返回匹配项的位置和子字符串。 2. regexprep:用于在字符串中查找正则表达式的匹配项,并将其替换为指定的字符串。 3. regexpi:与regexp函数类似,但是不区分大小写。 4. regexprep:与regexprep函数类似,但是不区分大小写。 5. regextranslate:将MATLAB字符串转换为正则表达式字符串。 在MATLAB中,正则表达式的语法与其他语言中的正则表达式语法类似。以下是一些常用的正则表达式语法: 1. ^:匹配输入字符串的开始位置。 2. $:匹配输入字符串的结束位置。 3. .:匹配除换行符以外的任何单个字符。 4. *:匹配前面的字符零次或多次。 5. +:匹配前面的字符一次或多次。 6. ?:匹配前面的字符零次或一次。 7. []:表示一个字符集,匹配其中的任何一个字符。 8. [^]:表示一个反向字符集,匹配未在其中的任何一个字符。 9. ():表示一个子表达式,可以在表达式中引用。 例如,以下代码将查找字符串中所有以大写字母开头的单词,并将它们替换为“Word”: str = 'This is a Test String'; newStr = regexprep(str, '\<([A-Z][a-z]*)\>', 'Word'); 输出结果为: newStr = 'Word is a Word Word'

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值