超简单python脚本实现Selenium+Xpath框架下批量自动通过文章名字识别文章类型并下载(还有不靠谱的机读)

在这个不平凡的2020的最后几天,林小姐的Group project分工分到了对155篇文章进行是否是RCT(Randomized Controlled Trial)研究的判断。


淦!好多.png

林小姐说要自己一篇篇看然后仔细筛选,
“在下佩服,棒!不愧是您”
然后她躺下睡着了。
好吧!看着林小姐的不那么盛世的美颜,我决定捡起我那几千个小时没用过的Selenium(本来想用scrapy,很可惜发现自己忘得差不多了)


首先当然是找规律!
去Pubmed搜了几篇发现人家的RCT都有标识了。那干就完了


RCT标识 of Pubmed
from selenium import webdriver
from collections import OrderedDict
import time
goin = "C:/Users/LIFANGPING/Desktop/inclusion1.txt"#Your paper name list
goout = "C:/Users/LIFANGPING/Desktop/inclusionout.csv"#Your outfile name list

file = open(goin,"r")
lines = list(file.readlines())
file.close()
outfile = open(goout,"w")

chromedriver = r"C:\Users\LIFANGPING\AppData\Local\Google\Chrome\Application\chromedriver"#Start the browers
driver = webdriver.Chrome(chromedriver)
url = "https://pubmed.ncbi.nlm.nih.gov/29747957/"# Search page of a paper from Pubmed


driver.get(url)
time.sleep(2) #keep enough time  of  waiting for the response between your browser and the server; all time.sleep is for this purpose

for i in lines:
    driver.refresh()
    time.sleep(1)
    print(i.strip(),end = ",",file = outfile)
   
    time.sleep(2)
    need = i.strip()
    scan = driver.find_element_by_xpath('/html/body/form/div/div[1]/div/span/input')#Search box location
    scan.send_keys(need)#Enter your search content
    
    time.sleep(2)
    scanclick = driver.find_element_by_xpath('/html/body/form/div/div[1]/div/button')#Search the search botton
    scanclick.click()#click the search botton
    time.sleep(2)
    try: #If there are multiple paper search results, choose the best
        bestmeet = driver.find_element_by_xpath('/html/body/main/div[9]/div[2]/section[1]/div[1]/article/div/a')
        bestmeet.click()
        time.sleep(2)
        doi = driver.find_element_by_xpath('.//*[@class="citation-doi"]').text #get the doi
        time.sleep(1)
        print(doi,file = outfile)
         
    except:
        try:
            time.sleep(4)
            doi = driver.find_element_by_xpath('.//*[@class="citation-doi"]').text
            time.sleep(2)
            print(doi,file = outfile)
         
        except:
            driver.get(url)
            time.sleep(2)
            print("",file = outfile)
            continue
            
outfile.close()

结果相当感人又有少年感!


部分结果(几乎是全部RCT文章了!)1.png

当然有些文章Pubmed没分类或者没收录的,醒来的林小姐睁着大大的小眼睛一脸无辜的说一定要仔细过一遍。(好吧!后来的事实证明这些剩下的没几篇是)

好吧,脚本还能做的就大概是根据doi下载了,下载肯定要有下载源,科研女神Alexandra Elbakyan的成果就此登场(好像新的网站版本里不挥手改下雪了)


手工调整一下Doi list.png

来吧!淦!
这里声明一下我用的是win下的Ubuntu子系统执行脚本,所以能直接用Wget

from selenium import webdriver
import os 

download_dir = "C:/Users/LIFANGPING/Desktop/allpdf/" # for linux/*nix, download_dir="/usr/Public"
options = webdriver.ChromeOptions()

profile = {"plugins.plugins_list": [{"enabled": False, "name": "Chrome PDF Viewer"}], # Disable Chrome's PDF Viewer
               "download.default_directory": download_dir , "download.extensions_to_open": "applications/pdf"}
options.add_experimental_option("prefs", profile)
driver = webdriver.Chrome("C:/Users/LIFANGPING/AppData/Local/Google/Chrome/Application/chromedriver", options=options)
# Optional argument, if not specified will search path.
file = open("C:/Users/LIFANGPING/Desktop/doi-part2.txt","r")
lines = list(file.readlines())
file.close()

srclist = []
for i in lines:
    doi = i.strip()
    print(doi)
    try:
        driver.get("https://sci-hub.se/"+doi)
        src = driver.find_element_by_xpath("//*[@id='pdf']").get_attribute("src")
        srclist.append(src)
    except:
        continue

for i in src:
    command = "wget " + i
    os.system(command)
图片.png

这里要注意hub页面直接出来的PDF其实并不在页面上,而是通过一个iframe引入到另一个页面了。需要通过XPath先定位到那个页面,然后通过Wget直接下载。
结果相当优秀


下下来了可我并不想看.png

有没有什么能替我读PDF?(以下内容不靠谱)
我们用 PyPDF2吧,搜关键词,我的关键词是

 word_list=['randomly assigned','randomlyassigned','random assi','randomass','randomizedcontrolledtrial','randomized controlled trial',"randomlyallo",'randomallo','random allo','randomallo','Randomizedcontrolledtrial','Randomizedclinicaltrial',"randomizedclinicaltrial"]

全代码:

import PyPDF2
import os


path = r"C:\Users\LIFANGPING\Desktop\newpdf"
pdflist = os.listdir(path)

for pdfgo in pdflist:
    
    pdf_File=open(path+"/"+pdfgo,'rb')
    print(pdfgo,end = ",")
    #path = r'C:\Users\LIFANGPING\Desktop\file'
    try:
        pdf_Obj=PyPDF2.PdfFileReader(pdf_File)
        pages=pdf_Obj.getNumPages()

        word_list=['randomly assigned','randomlyassigned','random assi','randomass','randomizedcontrolledtrial','randomized controlled trial',"randomlyallo",'randomallo','random allo','randomallo','Randomizedcontrolledtrial','Randomizedclinicaltrial',"randomizedclinicaltrial"]


        for w in word_list:
            page_list=[]
            for p in range(0,pages):
                text=pdf_Obj.getPage(p).extractText().strip()

                if text.find(w) != -1:
                    page_list.append(p+1)

            print(w,page_list,end = ",")

        print()
    except:
        continue

其实还是满可靠的,不是的就是没有,是的就都有好几个!

不是就是没有,是有好几个.png

就是不敢相信,还是一篇篇看了(为啥不相信机器呢?)
乏了乏了。

林小姐的group project leader: “不属于我们小组的李同学真是一个宝!”
喵喵喵?

大家新年快乐!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,137评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,824评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,465评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,131评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,140评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,895评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,535评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,435评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,952评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,081评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,210评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,896评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,552评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,089评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,198评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,531评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,209评论 2 357

推荐阅读更多精彩内容