我是靠谱客的博主 笨笨母鸡,最近开发中收集的这篇文章主要介绍利用matlab爬虫从OPGG上整理LOL英雄信息,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

问题描述

OPGG是最权威的LOL数据网站,从这个网站上我们可以得到很多有关LOL的非常有用的数据,而matlab爬虫就是一个能够从网站上搜集信息的工具。这篇文章将要讲述如何利用matlab爬虫从OPGG上整理LOL英雄信息。

结果展示

在这里插入图片描述
英雄的信息分为三列,分别为中文名、英文名、位置。

代码分析

一开始,麻烦的事情就出现了,OPGG官网:http://www.op.gg/champion/statistics是一个综合多种语言的网站,但是每种语言的链接都是一样的。当我们使用urlread语句读取这个网站的信息的时候,却默认打开的是英文版的网站。但是我们所需要收集是信息却是中文版的。为了解决这个问题,我们只能将该网页源代码中我们所需要的那一部分保存到一个txt文件中。将其命名为"22.txt"。

a=importdata(‘22.txt’);
读取txt文件"22.txt"。

b=convertCharsToStrings(a);
转化为字符串数组。

A=regexpi(b,‘data-champion-name="S{1,}"’,‘match’);
观察网页源代码,中文名周围的格式为’data-champion-name=" ",利用正则化匹配将其找出。

A(cellfun(@isempty,A))=[];
去掉没有匹配项的空cell数组。

for i=1:size(A)
C(i)=A{i}(1);
end
将字符串提取到一个新矩阵C中。

C=strrep(C,‘data-champion-name="’,’’);
C=strrep(C,’"’,’’);
将’data-champion-name="和’"删掉,此时字符串中只剩下中文名。

B=regexpi(b,‘data-champion-key="S{1,}"’,‘match’);
B(cellfun(@isempty,B))=[];
for i=1:size(B)
D(i)=B{i}(1);
end
D=strrep(D,‘data-champion-key="’,’’);
D=strrep(D,’"’,’’);
同理,利用正则化匹配找出英文名。

位置这一部分有些复杂,因为一个英雄可能适合很多个位置,当我们搜索位置的时候,可能会获得多个结果,而这每一个结果都被保存在不同的cell数组中,我们要想办法将它们连起来。
已知语句:[‘a’,‘b’,‘c’]可以将字符串连起来,变成’abc’。所以我们想要将’上单’,‘中单’,'打野’连起来,就要想办法将它们变成[‘a’,‘b’,‘c’]的形式。

E=regexpi(a,‘title="S{1,}|S{1,}’,‘match’);
E(cellfun(@isempty,E))=[];
先不将a化为字符串数组,先进行正则化匹配,然后去空。正则化匹配的时候,我们意识到“巨魔之王”的匹配格式和其他英雄都不同,为title=" 。所以要用一个|,将“巨魔之王”的匹配格式放在前面。

F=cell(size(E,1),1);
定义F为一个空的字符数组。

for i=1:size(E,1)
for j=1:size(E{i},2)
F{i}=[F{i},E{i}{j}];
end
end
利用这个方法可以将E{i}中的每个元素合并到F{i}中。

F=strrep(F,’’,’’);
F=strrep(F,’’,’’);
F=strrep(F,‘title="’,’’);
F=strrep(F,’"’,’’);
F=convertCharsToStrings(F);
删去多余字符,转化为字符串数组。

G=[“中文名”,“英文名”,“位置”];
xlswrite(‘output2.xlsx’,G,‘A1:C1’);
xlswrite(‘output2.xlsx’,C’,‘A2:A146’);
xlswrite(‘output2.xlsx’,D’,‘B2:B146’);
xlswrite(‘output2.xlsx’,F,‘C2:C146’);
写入excel。设置A2:A146的原因是总共的英雄数量为145。

源代码

a=importdata('22.txt');
b=convertCharsToStrings(a);
A=regexpi(b,'data-champion-name="S{1,}"','match');
A(cellfun(@isempty,A))=[];
for i=1:size(A)
C(i)=A{i}(1);
end
C=strrep(C,'data-champion-name="','');
C=strrep(C,'"','');
B=regexpi(b,'data-champion-key="S{1,}"','match');
B(cellfun(@isempty,B))=[];
for i=1:size(B)
D(i)=B{i}(1);
end
D=strrep(D,'data-champion-key="','');
D=strrep(D,'"','');
E=regexpi(a,'title="S{1,}|<span>S{1,}</span>','match');
E(cellfun(@isempty,E))=[];
F=cell(size(E,1),1);
for i=1:size(E,1)
for j=1:size(E{i},2)
F{i}=[F{i},E{i}{j}];
end
end
F=strrep(F,'<span>','');
F=strrep(F,'</span>','');
F=strrep(F,'title="','');
F=strrep(F,'"','');
F=convertCharsToStrings(F);
G=["中文名","英文名","位置"];
xlswrite('output2.xlsx',G,'A1:C1');
xlswrite('output2.xlsx',C','A2:A146');
xlswrite('output2.xlsx',D','B2:B146');
xlswrite('output2.xlsx',F,'C2:C146');

最后

以上就是笨笨母鸡为你收集整理的利用matlab爬虫从OPGG上整理LOL英雄信息的全部内容,希望文章能够帮你解决利用matlab爬虫从OPGG上整理LOL英雄信息所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部