py3.5+webdriver+beautifulsoup+正则表达式
最近实验室老是让我翻译论文,翻译的时候总觉得参考文献太麻烦:
1.PDF是分栏的,不想去做段落重排
2.格式啥的太烦
今天忽然就想用百度学术里面的“引用”来将PDF上面的参考文献写成标准的形式,然后直接copy去word里面
思路如下:
1.先把pdf参考文献直接copy到txt里,整个过程不需要花费超过五秒吧
2.从txt里用正则表达式匹配到论文名字,然后在百度学术里面搜索
3.点击引用(注意实际过程中可能会出现两个不一样的页面)
4.把引用内容爬下来放在另一个txt里
这个网络密集型可以用多线程实现,但是懒得搞了,后面再改吧,很简单
注意,使用webdriver必须要先搭配环境装一个exe 很简单 大家可以搜一下
最后效果如下:
pdf里面的:

爬虫写下来的:
代码贴下:
import selenium.common.exceptions as sele_error
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
import selenium
from selenium import webdriver
import urllib
import random
import time
import refile= "./未找到的参考文献.txt" #记录没有爬取到的参考文献名字
file1= "./bbb.txt" #pdf里面的参考文献
file_to_w= "./real.txt" #写入的txt
url= "http://xueshu.baidu.com/"'''
[32] A. Gretton, A. Smola, J. Huang, M. Schmittfull, K. Borgwardt, and
B. Schölkopf, ‘‘Covariate shift by kernel mean matching,’’ Dataset shift
Mach. Learn., vol. 3, no. 4, pp. 131–160, 2009.
'''
'''
<input name="wd" id="kw" maxlength="256" class="s_ipt" autocomplete="off" type="text">
'''def get_name(string):names= re.findall(",.*?‘‘(.*?)’’",string,re.S)if len(names)== 0:return ""return names[-1].strip(",")# a= get_name('''
# [32] A. Gretton, A. Smola, J. Huang, M. Schmittfull, K. Borgwardt, and
# B. Schölkopf, ‘‘Covariate shift by kernel mean matching,’’ Dataset shift
# Mach. Learn., vol. 3, no. 4, pp. 131–160, 2009.
# ''')
# print(a)def get_real_name(driver,name_to_search):# driver= webdriver.Firefox()# driver.set_page_load_timeout(20)try:try:input= driver.find_element_by_id("kw")except sele_error.NoSuchElementException:try:driver.switch_to.default_content()try:input= driver.find_element_by_id("kw")except sele_error.NoSuchElementException:driver.back()locator = [By.ID, "kw"]WebDriverWait(driver, 60, 1).until(EC.presence_of_element_located(locator))input= driver.find_element_by_id("kw")except Exception as e:with open(file,'a+') as f:f.write("%s\n"%name_to_search)input.click()input.send_keys(name_to_search)key= driver.find_element_by_id("su")key.click()time.sleep(random.randint(0,3))'''<a class="sc_q c-icon-shape-hover" href="javascript:;" data-link="http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6279353"data-sign="9f7be0c76448d79a7e0fe57d68b5b62e" data-click="{'button_tp':'cite'}"title="引用"><i class="iconfont icon-cite"></i>引用</a>'''try:locator= [By.CSS_SELECTOR,"a[class=\"sc_q c-icon-shape-hover\"]"]WebDriverWait(driver,10,1).until(EC.presence_of_element_located(locator))except:locator = [By.CSS_SELECTOR, "a[class=\"sc_q\"]"]WebDriverWait(driver, 10, 1).until(EC.presence_of_element_located(locator))get_way = driver.find_elements_by_css_selector("a[class=\"sc_q\"]")[0]get_way.click()time.sleep(random.randint(0, 3))locator = [By.CSS_SELECTOR, "div[class=\"sc_quote_list_item_r\"]"]WebDriverWait(driver, 30, 1).until(EC.presence_of_element_located(locator))soup = BeautifulSoup(driver.page_source)driver.back()div_ = str(soup.find_all(name="div", attrs={"class": "sc_quote_list_item_r"})[0])return re.findall(">(.*?)</div>", div_, re.S)[0]get_way= driver.find_elements_by_css_selector("a[class=\"sc_q c-icon-shape-hover\"]")[0]get_way.click()time.sleep(random.randint(0, 3))'''<div class="sc_quote_list_item_r" data-type="GB/T" tabindex="0"id="sc_cit0">Quiñonero-Candela J, Sugiyama M, Schwaighofer A, et al. Covariate Shift by Kernel Mean Matching[C]// MIT Press, 2009:131-160.</div>'''locator= [By.CSS_SELECTOR, "div[class=\"sc_quote_list_item_r\"]"]WebDriverWait(driver, 30, 1).until(EC.presence_of_element_located(locator))soup= BeautifulSoup(driver.page_source)driver.back()div_= str(soup.find_all(name="div",attrs={"class":"sc_quote_list_item_r"})[0])return re.findall(">(.*?)</div>",div_,re.S)[0]except Exception as e:driver.back()print(e)with open(file, 'a+') as f:f.write("%s\n" % name_to_search)if __name__ == "__main__":need= str(open(file1,'r').read()).replace("\n","").split("[")driver = webdriver.Firefox()driver.set_page_load_timeout(20)driver.get(url)locator = [By.ID, "kw"]WebDriverWait(driver, 60, 1).until(EC.presence_of_element_located(locator))# with open(file_to_w,'a+',encoding="utf-8") as f1:index= 1for value in need:name= get_name(value)if name== "":continuename_to_write= get_real_name(driver,name)if isinstance(name_to_write,str):with open(file_to_w, 'a+', encoding="utf-8") as f1:f1.write("[%d] %s\n"%(index,name_to_write))index+= 1

利用爬虫将PDF的参考文献放在word中相关推荐

  1. 将pdf按页插入word中_如何将PDF插入Microsoft Word

    将pdf按页插入word中 Microsoft Word provides a plethora of features for handling content. One of these uniq ...

  2. Endnote使用指南——Endnote导入参考文献到Word中

    对于科研学子来说,EndNote(或NoteExpress)是管理文献的利器,能够快速筛选文献与录入参考文献,非常适用于参考文献较多的场合. 首先Endnote的安装这里就不赘述,直接附上安装包链接以 ...

  3. 从pdf复制文字到word中的问题

    从pdf复制的一半的文字到word仍旧是排列再对应的一半,下面的方法是将!.?" 后的回车删掉 1.进入替换状态 2.点"更多"按钮 3.选中"使用通配符&qu ...

  4. 利用爬虫有道词典进行翻译python3中的内置函数属性功能

    from urllib import request from urllib import parse import json import time import random import has ...

  5. 10行Python代码批量实现pdf转txt,word,提取表格到excel

    在日常工作中,常常要把文档转格式,比如常见pdf转word,pdf转ppt等,如果数量少的话还好,可以直接去网上找网站解决,多了的话就比较麻烦了,因为很多网站都是限制一天只能转几个,再多就得冲vip. ...

  6. Word中使用交叉引用插入多个参考文献

    Word中使用交叉引用插入多个参考文献 在word中的一个引用插入多个文献时,比如 第一步:点击交叉引用将[45].[47]这两个文献插入. ----------------- 第二步:右键刚插入的文 ...

  7. pdf格式的图片如何插入到word中

    太长不看篇 1,在R中将图片保存为pdf格式 2,通过在线网站,将pdf转为png 3,将png粘贴到word中即可 背景0 今天做了一个相关性分析,以及可视化.可视化的图我在Rstudio中保存为p ...

  8. thinkphp6错误页面编辑_Windows10在Word中编辑PDF文件

    在以前,如果我们需要编辑PDF文件,而复杂的PDF文件包含各种内容,逻辑结构元素以及注释,图层,富媒体,甚至文件附件和数字签名等交互元素.支持如此强大的PDF编辑,优先选择Adobe Acrobat. ...

  9. Endnote在Word中导入的参考文献忽然变成带有大括号类似{#}的代码的解决办法

      最近用Endnote插入参考文献的时候,突然发现导入的参考文献变成了带有大括号类似{#}的代码,且导入压根不成功,这个问题目前我发现了两种不同的情况,下面分别记录一下解决办法: 这个是标题0.0 ...

最新文章

  1. Cygwin-添加到右键菜单脚本--一键安装、卸载
  2. cp -r dir1/. dir2 表示将dir1下的文件复制到dir2,不包括dir1目录
  3. 刚刚,阿里发布AI谣言粉碎机,识别准确率达81%
  4. db2数据库连接数 linux_linux db2 连接数据库
  5. [图神经网络] 图神经网络GNN基础入门
  6. transition
  7. springboot项目中关于时间类型转换的格式问题
  8. 2台主机的docker互相通信的方法
  9. android比较两个字符串,关于java:两个字符串的比较在android中不起作用
  10. 我的HTML学习之路02
  11. Atitit flowable使用总结 目录 1. flowable 1 1.1. 添加依赖 1 1.2. Flowable的启动接口 2 2. 还是使用简单流程来完成业务流程的学习, 2 2.1.
  12. 深度学习优化算法-AdaDelta算法
  13. MySQL卸载不干净问题
  14. 百问网7天物联网智能家居 学习心得 打卡第三天
  15. 一篇關於Android layout研究的文章[轉 from:http://blog.csdn.net/archimedes_zht/article/details/5333120]...
  16. arduion-step motor 28byj-48步进电机
  17. 分享下在国内发售的全系列联想小新平板的型号和对应的海外版
  18. 如何学习VB最新总结
  19. 超全的机器学习、深度学习视频课程和讲义的百度网盘下载
  20. 智慧医疗助力健康养老服务

热门文章

  1. Android10 系统默认给app运行时权限
  2. 电力现货市场的业务流程
  3. 01 | 论文「外审」到底看什么?
  4. 解密档案能否洗去宋子文贪污嫌疑?
  5. 商业计划书,没有策划成分,不行
  6. javabean民宿短租网站 mysql源码含说明书文档
  7. Uncaught SyntaxError: Unexpected token E in JSON at position 0 at JSON.parse (anonymous)
  8. 26python编程实现PPT文档内容样式批量调整
  9. 加解密工具RSATool的使用
  10. Windows双系统共享应用软件的三种方法介绍