目录
一、爬虫
二、数据处理
2.1 历年投稿总数:
2.2 各稿件状态比例:
2.3 历年退稿率
三、总结(福州大学学报退稿率)
从福州大学学报微信公众号可以发现稿件状态的查询接口, 根据测试可知稿件号由年份与当年投稿数组成,例如稿件号22345所对应的稿件是2022年第345号稿件。具体如下图所示:
为爬取历年稿件状态,复制出该界面链接,通过该链接进一步寻找访问接口为:http://fzdx.cnjournals.cn/ch/mobile/m_article_status_query.html
在浏览器中进入F12开发者工具调试界面中的网络,并输入稿件号,如下图所示:
输入稿件号并查询的结果确定接口的请求方法与相关参数如下:
于是可以相应的编写如下爬虫代码,注意访问间隔时间,否则会爬虫会由于访问过快被限制访问
code = []
state = []
for i in range(13000,23555):
url = "http://fzdx.cnjournals.cn/ch/mobile/m_article_status_query_data.aspx?file_no={}".format(i)
res = requests.get(url).text
if i % 30 == 0:
time.sleep(10)
if res[:10] == "
您输":
continue
print(res.split(",")[0].split(":")[1],res.split(",")[1].split(":")[1])
code.append(res.split(",")[0].split(":")[1])
state.append(res.split(",")[1].split(":")[1])
将爬取的数据保存至DataFrame后输出至CSV文件,并仅保存稿件号的年份作为index,代码如下:
data = pd.DataFrame(state,index=code).to_csv("FZUdata_temp.csv")
data = pd.read_csv("FZUdata_new.csv",encoding="gbk",index_col=0)
data.columns = ["state"]
newCols = []
for eachIndex in data.index:
newCols.append(eachIndex//1000)
data.index = newCols
结果如下:
#每年投稿总数
for eachYear in range(13,24):
print(len(data.loc[eachYear]))
#各稿件状态比例
data["state"].value_counts(1)*100
for eachYear in range(13,24):
print(eachYear,
data["state"].loc[eachYear].value_counts(1)["直接退稿"]*100,
data["state"].loc[eachYear].value_counts(1)["退稿"]*100,
data["state"].loc[eachYear].value_counts(1)[["直接退稿","退稿"]].sum()*100)
近五年福州大学学报退稿率接近70%,但其中直接退稿率逐渐增加,从2020年的39.19%上升至2023年(2023年数据截止于2023.6.20)的59.73%,审稿后退稿率降低至10.41%。