Matlab入门2 爬虫和数据处理

赞赏码 & 联系方式 & 个人闲话

配套课件可访问https://github.com/BIMK/MATLAB下载,是安徽大学Matlab本科教学课件,逻辑清晰,简洁明了,颇为实用,用来入门再好不过(机器学习方向)。

本系列博文是课后练习的个人解答,通过几个小实验展示matlab基本语法和技巧。接触Matlab也有几年了,略有心得,分享给大家。

 

【实验名称】爬虫和数据处理

 

【实验目的】

1. 熟悉matlab数据处理的基本方法

2. 掌握基本的爬虫和正则表达式使用方法

3. 掌握数据的后续处理、排序等操作

 

【实验内容】

1. 从安居客上爬取合肥各小区二手房信息,并汇总保存至Excel中。

2. 从 https://hf.anjuke.com/community/p1/至p50/中获取每个小区的名称、行政区、子区域和价格信息,共计1500条。

3. 将所有信息保存在Excel中,并按以下规则重排:

所属子区域相同的小区排列在一起,且小区按价格进行降序排列

所属行政区相同的子区域排列在一起,且子区域按

其中小区最高价进行降序排列

行政区按其中小区最高价进行降序排列

 

代码(详见注释)

function task()
%% 爬虫
Data = {};
for num = 1:50
    try
        str   = urlread(['https://hf.anjuke.com/community/p',num2str(num),'/']);
        name = regexp(str,'(?<=\n\s{35}target="_blank">).*?(?=)','match');
        temp  = regexp(str,'(?<=
).*?(?=
)','match'); loc = cell(size(temp,2),2); for i = 1:size(temp,2) loc(i,1) = regexp(temp{i},'(?<=£Û).*?(?=-)','match'); loc(i,2) = regexp(temp{i},'(?<=-).*?(?=£Ý)','match'); loc = cellfun(@(s)s(s>999),loc,'UniformOutput',false); end price = regexp(str,'(?<=)\d+','match'); Data = [Data;name',loc,price']; clc;fprintf('%d %d',num,size(Data,1)); catch break; end end %% 爬虫数据存读 方便调试 % save Data Data load('Data.mat'); %% 按小区分类 Loc2{1} = Data(1,:); for i = 2:size(Data,1) for j = 1:size(Loc2,1) if isequal(Loc2{j}(1,3),Data(i,3)) Loc2{j} = [Loc2{j};Data(i,:)]; break; elseif j==size(Loc2,1) temp{1} = Data(i,:); Loc2 = [Loc2;temp]; end end end %% 小区内按价钱排序 for i = 1:size(Loc2,1) [~,rank] = sort(str2double(Loc2{i}(:,4)),'descend'); Loc2{i} = Loc2{i}(rank,:); end %% 按行政区分类&按小区最高价排列 Loc1{1} = Loc2{1}; for i = 2:size(Loc2,1) for j = 1:size(Loc1,1) %如果行政区已经存在 if isequal(Loc1{j}(1,2),Loc2{i}(1,2)) %寻找该小区在行政区中插入点 for k = 1:size(Loc1{j},1) if k == 1 if str2double(Loc1{j}(1,4))<=str2double(Loc2{i}(1,4)) Loc1{j} = [Loc2{i};Loc1{j}]; break; end elseif ~isequal(Loc1{j}(k,3),Loc1{j}(k-1,3)) if str2double(Loc1{j}(k,4))<=str2double(Loc2{i}(1,4)) Loc1{j} = [Loc1{j}(1:k-1,:);Loc2{i};Loc1{j}(k:end,:)]; break; end end if k == size(Loc1{j},1) Loc1{j} = [Loc1{j};Loc2{i}]; break; end end break; %行政区未存在则添加 elseif j == size(Loc1,1) temp{1} = Loc2{i}; Loc1 = [Loc1;temp]; end end end %% 按行政区最高价排列 Result = Loc1{1}; for i = 2:size(Loc1,1) for j = 1:size(Result,1) if j == 1 if str2double(Result(j,4))

运行结果(详见my.xlsx)

Matlab入门2 爬虫和数据处理_第1张图片Matlab入门2 爬虫和数据处理_第2张图片

 合肥房价也是越来越高了啊

 

你可能感兴趣的:(Matlab入门,matlab,爬虫)