【毕设】知网文献检索列表中的 href 解析为可访问的 URL

文献检索列表中的 href 解析为可访问的 URL

设计一个自动化的爬虫,需要获取文献列表中的href,不过有的href值不能直接作为URL进行访问,需要进行解析,本文介绍将获取到的href值解析成可访问的URL

文献详情URL解析

期刊文献,例如,TransPath:一种基于深度迁移强化学习的知识推理方法

这个链接 “https://kns.cnki.net/kcms/detail/detail.aspx?dbcode=CAPJ&dbname=CAPJLAST&filename=XXWX2021031700R” 可进入文章详情

这个是通过selenium获取到的href值为“https://kns.cnki.net/KNS8/Detailsfield=fn&QueryID=0&CurRec=1&recid=&FileName=XXWX2021031700R&DbName=CAPJLAST&DbCode=CAPJ&yx=Y&pr=&URLID=21.1106.TP.20210319.1034.020”,但是点击进去就不能获取到文章详情

通过分析两个URL可以发现,只需通过正则表达式提取出FileName=XXWX2021031700R&DbName=CAPJLAST&DbCode=CAPJ这一部分然后拼接成“https://kns.cnki.net/kcms/detail/detail.aspx?FileName=XXWX2021031700R&DbName=CAPJLAST&DbCode=CAPJ”,同样可以进入文章详情

正则表达式:FileName=(.*?)&DbName=(.*?)&DbCode=(.*?)&

外文期刊:例如,An ontology-based deep learning approach for triple classification with out-of-knowledge-base entities

可以直接通过slenium获取到的URL进入文章详情页

论文文献:例如,基于大数据的智能辅助诊疗全流程管理系统的研究与实现

URL获取过程和期刊文献类似

作者详情URL解析

例如,崔员宁

可进入详情的链接,“https://kns.cnki.net/kcms/detail/knetsearch.aspx?dbcode=CAPJ&sfield=au&skey=%e5%b4%94%e5%91%98%e5%ae%81&code=43931005”

通过selenium获取的URL为“https://kns.cnki.net/KNS8/Detail?sdb=CAPJ&sfield=%e4%bd%9c%e8%80%85&skey=%e5%b4%94%e5%91%98%e5%ae%81&scode=43931005&acode=43931005”

这个链接解析起来有点复杂

固定部分:https://kns.cnki.net/kcms/detail/knetsearch.aspx?

dbcode:dbcode=+ 获取 href 的 sdb 值

skey:&sfield=au&skey=+ 获取 href 的 skey 值

code:&code=+ 获取 href 的 acode 值

def href_to_url(href):
    baseURL = 'https://kns.cnki.net/kcms/detail/knetsearch.aspx?'
    m1 = re.search(r'sdb=(.*?)&', href)
    m2 = re.search(r'skey=(.*?)&', href)
    m3 = re.search(r'acode=.*', href)
    dbcode = m1.group(0).replace('sdb=', '')
    skey = m2.group(0).replace('skey=', '')
    code = m3.group(0).replace('acode=', '')
    return '{}dbcode={}sfield=au&skey={}code={}'.format(baseURL, dbcode, skey, code)

文献来源URL

通过selenium获取到的可直接点击进入详情,无需修改

重构

之前是把爬取的数据暂存到了CSV文件中,发现整个项目设计的不太合理,这次把数据先存到mysql中,重构后的E-R图需要用到5个实体表,4个关系表。

  • 实体表:文章,作者,学校,论文所在学校,期刊机构
  • 关系表:文章-作者,师生关系,文章-来源,作者-学校

E-R图如下所示:

更多源码已经上传至码云,如果代码有需要优化的地方,欢迎各位大佬指点

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值