一行代码得到全学科的北大核心期刊投稿方式

问题提出

2022 年已过了六分之一,马上要上班投入新的战斗,好久没写代码,手有些痒,准备提前热热身,又正好瞄到一篇微信公众号文章,里面汇总了所有学科的北大核心期刊投稿方式,有邮箱,投稿系统的网址,还有纸质稿件的接收地址。考虑先在本地保存成 Excel 表格后,分析下哪些杂志社的信息化程度较高或更重成本而轻效率,另外说不定哪天自己想投文章了,也方便查阅比较。

放上源信息和本地数据文件截图做对比,对代码和原理不感兴趣的同学,直接跳到文末,关注微信公众号“乐享 Python”,回复"北大核心",获取所有投稿联系方式的数据。
一行代码得到全学科的北大核心期刊投稿方式
一行代码得到全学科的北大核心期刊投稿方式

设计思路

简单说,常规的思路分为三步:请求,解析,保存。主要用到Python中的爬虫知识和丰富的第三方库。有关爬虫的学习资源,强烈推荐一个在线电子书 https://python3webspider.cuiqingcai.com/

  • 请求库通常有requests ,Selenium ,PhantomJS 等。
  • 解析库有lxml ,html5lib,Beautiful Soup,pyquery 等。本文选择html5lib,中文容错能力强。
  • 保存方式有txt,csv,xlsx,各种关系数据库等。本文选择轻小简便的csv文件存储。

既然上面讲的是常规爬虫设计思路,本文又要一句代码实现,所以上面介绍的工具大都不用,只用到html5lib和Pandas。Pandas 是 Python 的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。

具体实现

  • 安装第三方库(html5lib和Pandas)。
    直接用上pip,现在想起十年前初学Python时,为安装一个简单的package,用easy_install折腾一个下午,满眼都是泪。
pip install pandas html5lib
import pandas as pd
dfs = pd.read_html(url, flavor="html5lib")
concat_df = pd.concat(dfs)
concat_df.to_csv("submit-table.csv", encoding="utf-8-sig", index=None, header=None)
  1. read_html(url, flavor=“html5lib”)

    • 参数一:url,除了可以接受含有表格table的网址url,可以接受含有table标签的字符串,还可以是本地文件。
    • 参数二:flavor,表示指定的解析器类型,默认是lxml,这些都需要事先通过pip命令安装。返回的结果是DataFrame组成的list
  2. concat函数

    • 参数一:args是必需的,表示参与拼接的pandas对象,如列表或字典,本代码中指的是dfs。
    • 参数二:axis表示在哪些轴方向上(行或列)进行数据拼接,其值0是行,1是列。由于本文实现相同字段的表首尾相拼接,所以采用默认值axis=0。当axis = 1的时候,concat就是行对齐,表示横向表拼接。
  3. to_csv(“submit-table.csv”, encoding=“utf-8-sig”, index=None, header=None)

    • 参数一:"submit-table.csv"表示将Dataframe对象保存为csv的文件名。
    • 参数二:encoding=‘utf-8-sig’,表示指定文件的编码,为了防止用Office Excel打开含中文字符的csv时出现乱码,这里指定utf-8-sig表示带有签名的 utf-8(UTF-8 with BOM)。
    • 参数三:index=None 不需要csv中每行的第一列中出现索引数字列。
    • 参数四:设置header=None,因为表格中已含有中文表头(学科,期刊刊名,投稿地址),所以不需出现起始0的数字表头。

为了便于阅读,严格说用了四行代码。一行代码应该是这个样子。

pd.concat(pd.read_html(url, flavor="html5lib")).to_csv(
    "submit-table.csv", encoding="utf-8-sig", index=None, header=None
)

结论

赠人玫瑰手有余香。

后期再分享一篇汇总了所有期刊的版面费和审稿费信息,其原理都一样,只是换个网址url即可。关注公众号 “乐享Python”,定期分享教育资源干货。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值