2014-03-06 160 views
3

我想從網站(html)中獲取信息到MATLAB中。我能夠從網上得到HTML到使用字符串:Matlab文本字符串/ html解析

urlread('http://www.websiteNameHere.com...'); 

一旦我有串我有一個很長的字符串變量,包含完整的HTML文件的內容。從這個變量中,我正在尋找特定類中的值/字符。例如,HTML /網站都會有一堆線,然後將在以下形式的興趣類:

... 
<h4 class="price"> 
<span class="priceSort">$39,991</span> 
</h4> 
<div class="mileage"> 
<span class="milesSort">19,570 mi.</span> 
</div> 
... 
<h4 class="price"> 
<span class="priceSort">$49,999</span> 
</h4> 
<div class="mileage"> 
<span class="milesSort">9,000 mi.</span> 
</div> 
... 

我需要能夠得到<span class="priceSort"></span>之間的信息;即上述例子中的39,991美元和49,999美元。什麼是最好的方式去做這件事?如果標籤的具體開始和結束也是相同的(如<price></price>),我會沒有問題...

我也需要知道最健壯的方法,因爲我希望能夠找到<span class="milesSort">等這類信息。謝謝!

回答

0

試試這個,讓我們知道,如果你的作品 -

url_data = urlread('http://www.websiteNameHere.com...'); 

start_string = '<span class="priceSort">'; %// For your next case, edit this to <span class="milesSort"> 
stop_string = '</span>'; 

N1 = numel(start_string); 
N2 = numel(stop_string); 

start_string_ind = strfind(url_data,start_string); 
for count1 = 1:numel(start_string_ind) 
    relative_stop_string_ind = strfind(url_data(start_string_ind(count1)+N1:end),stop_string); 
    string_found_start_ind = start_string_ind(count1)+N1; 
    string_found = url_data(string_found_start_ind:string_found_start_ind+relative_stop_string_ind(1)-2); 
    disp(string_found); 
end 
0

使用strsplit

s = urlread('http://www.websiteNameHere.com...'); 

x = 'class="priceSort">'; %starting string x 
y = 'class="milesSort">'; %starting string y 
z = '</span>'; %ending string z 

s2 = strsplit(s,x); %split for starting string x 
s3 = strsplit(s,y); %split for starting string y 

result1 = cell(size(s2,2)-1,1); %create cell array 1 
result2 = cell(size(s3,2)-1,1); %create cell array 2 

%loop through values ignoring first value 
%(change ind=2:size(s2,2) to ind=1:size(s2,2) to see why) 

%starting string x loop 
for ind=2:size(s2,2) 
    m = strsplit(s2{1,ind},z); 
    result1{ind-1} = m{1,1}; 
end 

%starting string y loop 
for ind=2:size(s3,2) 
    m = strsplit(s3{1,ind},z); 
    result2{ind-1} = m{1,1}; 
end 

希望簡單的解決方案這有助於