利用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;
好了,自此我们就完成了从网页上获取数据的过程。

 


猜你喜欢

转载自blog.csdn.net/lingyunxianhe/article/details/77838436