问题描述
OPGG上有各位置、各英雄的胜率和登场率的统计,这篇文章将展示如何利用matlab爬虫搜集这些信息。
结果展示
代码分析
还是上次的问题,无法利用urlread语句读取OPGG中文版的信息,所以只能将网页源代码保存到txt文件中。我们将txt文件命名为"33.txt"。这次还遇到了新问题,importdata语句在读取txt文件时,如果该txt文件的某一行只有数字和空格,那么读取就会不正常。为了避免这种情况的发生,我们必须先把txt文件中只有数字和空格的那些行删掉。
a=importdata(‘33.txt’);
b=convertCharsToStrings(a);
A=regexpi(b,‘champion-index-table__name">\S{1,}’,‘match’);
A(cellfun(@isempty,A))=[];
for i=1:size(A)
C(i)=A{i}(1);
end
C=strrep(C,‘champion-index-table__name">’,’’);
C=strrep(C,’’,’’);
找出所有的英雄名称。这个之前的文章里解释过就不再解释了。
B=regexpi(b,‘champion-index-table__cell–value">\S{1,}’,‘match’);
B(cellfun(@isempty,B))=[];
for i=1:size(B)
D(i)=B{i}(1);
end
D=strrep(D,‘champion-index-table__cell–value">’,’’);
D=strrep(D,’’,’’);
找出所有的胜率和出场率(两者的格式一样)。
j=0;
for i=1:2:size(D,2)
j=j+1;
E(j)=D(i);
end
j=0;
for i=2:2:size(D,2)
j=j+1;
F(j)=D(i);
end
将胜率和出场率二者分开,储存到两个矩阵中。
C=C’;
E=E’;
F=F’;
矩阵转置,方便后面写入。
G=[“上单”,“胜率”,“登场率”,“打野”,“胜率”,“登场率”,“中单”,“胜率”,“登场率”,“下路”,“胜率”,“登场率”,“辅助”,“胜率”,“登场率”];
xlswrite(‘output3.xlsx’,C(1:50,:),‘A2:A51’);
xlswrite(‘output3.xlsx’,E(1:50,:),‘B2:B51’);
xlswrite(‘output3.xlsx’,F(1:50,:),‘C2:C51’);
xlswrite(‘output3.xlsx’,C(51:93,:),‘D2:D44’);
xlswrite(‘output3.xlsx’,E(51:93,:),‘E2:E44’);
xlswrite(‘output3.xlsx’,F(51:93,:),‘F2:F44’);
xlswrite(‘output3.xlsx’,C(94:152,:),‘G2:G60’);
xlswrite(‘output3.xlsx’,E(94:152,:),‘H2:H60’);
xlswrite(‘output3.xlsx’,F(94:152,:),‘I2:I60’);
xlswrite(‘output3.xlsx’,C(153:170,:),‘J2:J19’);
xlswrite(‘output3.xlsx’,E(153:170,:),‘K2:K19’);
xlswrite(‘output3.xlsx’,F(153:170,:),‘L2:L19’);
xlswrite(‘output3.xlsx’,C(171:207,:),‘M2:M38’);
xlswrite(‘output3.xlsx’,E(171:207,:),‘N2:N38’);
xlswrite(‘output3.xlsx’,F(171:207,:),‘O2:O38’);
xlswrite(‘output3.xlsx’,G,‘A1:O1’);
写入excel。其中设置A2:A51的原因是上单英雄有50个,D2:D44的原因是打野英雄有43个,后面以此类推。
源代码
a=importdata('33.txt');
b=convertCharsToStrings(a);
A=regexpi(b,'champion-index-table__name">\S{1,}</div>','match');
A(cellfun(@isempty,A))=[];
for i=1:size(A)
C(i)=A{i}(1);
end
C=strrep(C,'champion-index-table__name">','');
C=strrep(C,'</div>','');
B=regexpi(b,'champion-index-table__cell--value">\S{1,}</td>','match');
B(cellfun(@isempty,B))=[];
for i=1:size(B)
D(i)=B{i}(1);
end
D=strrep(D,'champion-index-table__cell--value">','');
D=strrep(D,'</td>','');
j=0;
for i=1:2:size(D,2)
j=j+1;
E(j)=D(i);
end
j=0;
for i=2:2:size(D,2)
j=j+1;
F(j)=D(i);
end
C=C';
E=E';
F=F';
G=["上单","胜率","登场率","打野","胜率","登场率","中单","胜率","登场率","下路","胜率","登场率","辅助","胜率","登场率"];
xlswrite('output3.xlsx',C(1:50,:),'A2:A51');
xlswrite('output3.xlsx',E(1:50,:),'B2:B51');
xlswrite('output3.xlsx',F(1:50,:),'C2:C51');
xlswrite('output3.xlsx',C(51:93,:),'D2:D44');
xlswrite('output3.xlsx',E(51:93,:),'E2:E44');
xlswrite('output3.xlsx',F(51:93,:),'F2:F44');
xlswrite('output3.xlsx',C(94:152,:),'G2:G60');
xlswrite('output3.xlsx',E(94:152,:),'H2:H60');
xlswrite('output3.xlsx',F(94:152,:),'I2:I60');
xlswrite('output3.xlsx',C(153:170,:),'J2:J19');
xlswrite('output3.xlsx',E(153:170,:),'K2:K19');
xlswrite('output3.xlsx',F(153:170,:),'L2:L19');
xlswrite('output3.xlsx',C(171:207,:),'M2:M38');
xlswrite('output3.xlsx',E(171:207,:),'N2:N38');
xlswrite('output3.xlsx',F(171:207,:),'O2:O38');
xlswrite('output3.xlsx',G,'A1:O1');