• 用 matlab 爬取期刊影响因子


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

    用 matlab 爬取期刊影响因子

    “爬虫”这个词的火爆多少跟 python 有些联系,python 也当之无愧是最适合写爬虫程序的语言。但如果 matlab 用户想要写个爬虫程序处理些简单任务,大可不必再学 python,matlab同样提供了获取 web 数据的函数,也能实现简单的爬虫。我来分享一个最近遇到的简单案例,说简单却也比中文互联网上能搜到的案例都难些,如果您觉得阅读本文有些吃力,不妨先读这篇文章,[原][Matlab][01] 做一个简单的爬虫或下载器

    任务是这样的,老师给我一张 Excel 表格,列了 400 多本期刊的标题,然后给了我一个网址(最新SCI影响因子查询及期刊投稿分析系统(2015-2016年) - LetPub),让我从这网站获取这些期刊的影响因子。这网站可以根据期刊名返回期刊信息,影响因子就在其中。考虑到链接可能失效,我给出一个截图,如下。

    写这段程序需要用到 webread 函数、regexp 函数和正则表达式,相关内容请参阅用户手册。

    我们需要用 webread 函数向网站提交我们要检索的期刊名,然后接收网站返回的网页源代码,最后从源代码中利用正则表达式提取出影响因子。

    提交期刊名时要在 webread 函数中指定网站上相关的变量名和变量值,变量值就是我们要检索的期刊名。那变量名怎么查看呢,其实变量名就是输入期刊名那个 input box 的 id,看图。

    如果你也用 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 中提取出影响因子。类似地,我们观察下包含影响因子的语句。

    <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 函数,因此该教程不适用。

    %% search impact factors from website for prof. Zhou.
    
    %% read journal names from the file provided by Zhou
    statics_filename = 'H:impact factorstatics20170224.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);
  • 相关阅读:
    Oracle 查询语句截取字符串
    删除ORACLE数据库中重复的数据
    [易学C#]C#3.0语言新特性之匿名类型
    [讨论]程序之路在何方?
    [易学C#]C#3.0语言新特性之扩展方法
    [易学C#]C#3.0语言新特性之对象和集合初始化器
    用C#解决Oracle9i和Oracle10g字符集不兼容的问题
    一个C#操作Oracle的通用类
    [易学C#]C#3.0语言新特性之隐式类型
    重拾 DirectX 一:配置Visual Studio 2008+Microsoft DirectX SDK (June 2008) 开发环境
  • 原文地址:https://www.cnblogs.com/neverguveip/p/9457295.html
Copyright © 2020-2023  润新知