任務是這樣的,老師給我一張 Excel 表格,列了 400 多本期刊的標題,而後給了我一個網址(最新SCI影響因子查詢及期刊投稿分析系統(2015-2016年) - LetPub),讓我從這網站獲取這些期刊的影響因子。這網站能夠根據期刊名返回期刊信息,影響因子就在其中。考慮到連接可能失效,我給出一個截圖,以下。php
寫這段程序須要用到 webread 函數、regexp 函數和正則表達式,相關內容請參閱用戶手冊。咱們須要用 webread 函數向網站提交咱們要檢索的期刊名,而後接收網站返回的網頁源代碼,最後從源代碼中利用正則表達式提取出影響因子。html
提交期刊名時要在 webread 函數中指定網站上相關的變量名和變量值,變量值就是咱們要檢索的期刊名。那變量名怎麼查看呢,其實變量名就是輸入期刊名那個 input box 的 id,看圖。python
若是你也用 Chrome 瀏覽器,那麼右擊 input box,單擊檢查,就會彈出元素檢查窗口,就能夠看到網頁的源碼了,咱們得知 input box 的 id 是 searchname,也就是說咱們經過 webread 函數提交的變量名是 searchname。這條語句以下。url = 'http://www.letpub.com.cn/index.php?page=journalapp&view=search';
source_page = webread(url, 'searchname', char(journal_names(i)));
這樣網頁源碼就儲存到了 source_page 變量中,接下來咱們從 source_page 中提取出影響因子。相似地,咱們觀察下包含影響因子的語句。web
<td style="border:1px #DDD solid; border-collapse:collapse; text-align:left; padding:8px 8px 8px 8px;">2.603</td>
咱們構造一個正則表達式,而且用 matlab 的 regexp 函數匹配。正則表達式
pattern = '>[0-9]\.[0-9][0-9][0-9]<';
IF = regexp(source_page, pattern, 'match');
通過試驗,pattern 兩端的 >< 符號應該保留,否則會匹配到不想要的結果。瀏覽器
下面給出完整的包含輸入輸出、循環的代碼。須要注意的是,若是想運行這段代碼須要讀者自行構建輸入文件,而且修改代碼中輸入文件的路徑。另請注意,matlab 2015a 之前的版本沒有 webread 函數,所以該教程不適用。app
%% search impact factors from website for prof. Zhou.
%% read journal names from the file provided by Zhou
statics_filename = 'H:\impact factor\statics20170224.xlsx';
[~, journal_names, ~] = xlsread(statics_filename, 'A2:A475');
%% save the pages from the website and match the impact factors.
n = size(journal_names);
statics_result = cell(n);
for i = 1:n
url = 'http://www.letpub.com.cn/index.php?page=journalapp&view=search'; % provided by Zhou
source_page = webread(url, 'searchname', char(journal_names(i)));
% match the impact factor from the source.
pattern = '>[0-9]\.[0-9][0-9][0-9]<';
IF = regexp(source_page, pattern, 'match');
IF = strjoin(IF);
statics_result(i) = {IF};
disp(i);
disp(IF);
end
%% write the statics file.
xlswrite(statics_filename, statics, 2);