用 matlab 爬取期刊影響因子

原址:https://zhuanlan.zhihu.com/p/25463570

用 matlab 爬取期刊影響因子

「爬蟲」這個詞的火爆多少跟 python 有些聯繫,python 也當之無愧是最適合寫爬蟲程序的語言。但若是 matlab 用戶想要寫個爬蟲程序處理些簡單任務,大可沒必要再學 python,matlab一樣提供了獲取 web 數據的函數,也能實現簡單的爬蟲。我來分享一個最近遇到的簡單案例,說簡單卻也比中文互聯網上能搜到的案例都難些,若是您以爲閱讀本文有些吃力,不妨先讀這篇文章, [原][Matlab][01] 作一個簡單的爬蟲或下載器

任務是這樣的,老師給我一張 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);
相關文章
相關標籤/搜索