摸鱼日记(二)——如何偷懒创造摸鱼时间

本文讲述了作者遇到大量学术论文查找任务,通过编写Python脚本利用爬虫技术,自动化搜索Google Scholar并抓取BibTeX引用,提高效率,避免手动操作的繁琐。然而,面临反爬虫挑战,作者计划后续解决这个问题。
摘要由CSDN通过智能技术生成

摸鱼日记002

前情提要

什么?你要问我为什么001还没出来?那是因为001还没摸完,但是002已经做完了。趁着摸鱼的功夫一鼓作气写出来。

今天在工作中碰到了一个问题:

导师语重心长地说:挨个找一下,所有A类会议和B类期刊以上的论文,现在没有出现在参考文献的(仅在bib文件但没有引用不行),列出来。

在这里插入图片描述

我数了一下,200多篇(快捷方式),手动搜索比对得到啥时候啊!!!心态当时就崩了!

问了下师兄(怂,不敢问导师),师兄说他给你快捷方式什么文献管理工具都不好使……那看起来只能一个个找了。万幸这里面大部分都是CCF-A CCF-B,剔除非上述要求花不了几分钟,但是在overleaf上看是否引用就得获得bib然后用Ctrl+F作对比,我先手动试了几个,一个从截取论文名称到google scholar搜索获得bib再到overleaf工程中寻找大概一分钟,重复机械效率太低了。

作为计算机相关专业的学生,怎么能不会偷懒(写脚本)呢?所以立马决定用爬虫的方式进行解决。

解决方案

首先根据文件命名格式,把论文名称切出来再说

def get_file_name_list(file_path):
    ls = []
    for i in os.listdir(file_path):
        index = i.find(']')
        # ls.append()
        ls.append(i[index+1:-15])
    return ls

获取bib则利用chrome驱动(教程在此https://blog.csdn.net/qq_43571807/article/details/105664246),模拟搜索即可。思路就是

1、先得到搜索网址url

2、然后对搜索结果进行点击进入论文详情页

3、最后点击引用符号即可获取。

利用selenium框架,对网页html结构做一个简单分析即可。话不多说直接上代码:

def paperUrl(name):
    q = name
    params = {
        'q':q
    }
    params = parse.urlencode(params)
    url = "https://scholar.google.com/scholar?" + params
    return url

def getBib(url):
    options = Options()
    # options.add_argument('-headless')
    driver = webdriver.Chrome(options=options)
    driver.get(url)
    # time.sleep(4)
    driver.find_element_by_class_name('gs_or_cit').click()
    time.sleep(3)
    s = driver.find_element_by_class_name('gs_citi')
    if s.text == 'BibTeX':
        hr = s.get_attribute('href')
    driver.get(hr)
    bib = driver.find_element_by_xpath("//*").text
    driver.quit()
    return bib

主函数调用即可

if __name__ == '__main__':
    temp_ls = get_file_name_list(file_path)
    print(temp_ls)
    for q in temp_ls:
        url = paperUrl(q)
        bib = getBib(url)
        print(bib)

结果如图所示

在这里插入图片描述

反思

这样做还有个问题是google有反爬虫机制。可以注意到我为了避免触发这个机制还是使用了time.sleep()函数,但是仍然被封了不少ip. 今天运气好,找到了一个不被封的梯子,但是如何解决反爬虫,那就是下次摸鱼的事情了。

引用

感谢大神的框架,省了我很多学习时间

https://blog.csdn.net/weixin_45177899/article/details/117364354

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值