谷歌学术搜索文献_谷歌学术论文翻译

谷歌学术搜索文献_谷歌学术论文翻译谷歌学术文献信息爬取及文献下载

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

两个py文件

起主要作用的Search&Download.py

# -*- coding: utf-8 -*-

import requests
from bs4 import BeautifulSoup
from Download import Hubber
import xlwt,os
from time import sleep
from tqdm import tqdm


TotalNum=0
class Article(object):
    title = ""
    article_link = ""
    authors = ""
    authors_link = ""
    abstract = ""
    def __init__(self):
        title = "New Paper"

def save_xls(sheet, paper):
    # 将数据按列存储入excel表格中
    global TotalNum
    sheet.write(TotalNum, 0, TotalNum)
    sheet.write(TotalNum, 1, paper.title)
    sheet.write(TotalNum, 2, paper.article_link)
    sheet.write(TotalNum, 3, paper.journal)
    sheet.write(TotalNum, 4, paper.authors_link)
    sheet.write(TotalNum, 5, paper.abstract)
    TotalNum += 1

head = { \
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36' \
        }  # 20210607更新,防止HTTP403错误
article_titles = []
article_links = []

def GetInfo(sheet,url):
  r = requests.get(url, headers=head)
  r.raise_for_status()
  r.encoding = r.apparent_encoding
  soup = BeautifulSoup(r.text, "html.parser")
  #print("\n"+soup)
  articles = soup.find_all(class_="gs_ri")
  for article in articles:
      paper =Article()
      try:
          title = article.find('h3')
          paper.title = title.text
          #print("\n"+paper.title)
          article_titles.append(paper.title)
          paper.article_link = title.a.get('href')
          #print("\n"+paper.article_link)
          article_links.append(paper.article_link)

          journal = article.find(class_="gs_a")
          paper.journal =journal.text
          #print("\n"+paper.authors)
          authors_addrs = journal.find_all('a')
          for authors_addr in authors_addrs:
              #print("\n"+authors_addr.get('href'))
              paper.authors_link=paper.authors_link +(authors_addr.get('href'))+"\n"

          abstract = article.find(class_="gs_rs")
          paper.abstract = abstract.text
          #print("\n"+paper.abstract)
      except:
          continue
      save_xls(sheet,paper)
  return


def getArticle(article_titles,article_links):
    dir = ".\\Articles\\" +keyword +"\\"
    #print (dir)
    if os.path.exists(dir) == False:
        os.mkdir(dir)
    for k in tqdm(range(len(article_titles))):
        article_titles[k]="{0}".format(article_titles[k].replace(':', ' ')).replace('.', '')
        path = dir + article_titles[k] + ".pdf"
        #print("\n"+path)
        try:
            Hubber.getPDF(article_links[k],path)
            sleep(0.5)
        except:
            continue

if __name__ == '__main__':
    myxls = xlwt.Workbook()
    sheet1 = myxls.add_sheet(u'PaperInfo', True)
    column = ['序号', '文章题目','文章链接','期刊', '作者链接', '摘要']
    for i in range(0, len(column)):
        sheet1.write(TotalNum, i, column[i])
    TotalNum+=1

    keyword=input("keywords is?\n")
    #keyword = diabetes and conjunctiva and (microcirculation or microvasculature)
    #print("\n"+keyword)
    key = keyword.replace(" ","+")
    info = keyword + "_PaperInfo.xls"

    print("\n"+"检索中……")
    if os.path.exists(info) == True:
        print("\n" + "PaperInfo already exists!")
    else:
        start = 0
        for i in tqdm(range(10)):
            url = 'https://xs.dailyheadlines.cc/scholar?start=' + str(start) + '&q=' + key + '&hl=zh-CN&as_sdt=0,5'
            start = start + 10
            GetInfo(sheet1,url)
            myxls.save(keyword+'_PaperInfo.xls')
            sleep(0.5)
    print("\n"+"检索完成")

    print("\n"+"下载中……")
    if len(article_titles) != 0:
        getArticle(article_titles, article_links)
    else:
        import xlrd
        data = xlrd.open_workbook(info)
        table = data.sheet_by_index(0)
        article_titles = table.col_values(1)[1:]
        article_links = table.col_values(2)[1:]
        #print("\n"+article_titles)
        #print("\n"+article_links)
        getArticle(article_titles, article_links)
    print("\n"+ "下载完成")

起辅助作用的Download.py,可将更多网站补充进去! 

import os.path
import re
import requests
from bs4 import BeautifulSoup

class Hubber:
    head = { \
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36' \
        }  # 20210607更新,防止HTTP403错误

    def pdf_hub(url,path):
        try:
            pdf = requests.get(url, headers=Hubber.head)
            with open(path, "wb") as f:
                f.write(pdf.content)
            print("\n"+"pdf found directly!")
        except:
            print("\n"+"failed to download pdf directly!\n" +url)
            Hubber.err_log(url)
    def sci_hub(path,doi):
        doi = str(doi).split("https://doi.org/")[1]
        url = "https://www.sci-hub.ren/doi:" + doi + "#"
        r = requests.get(url, headers=Hubber.head)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        soup = BeautifulSoup(r.text, "html.parser")
        download_url = soup.iframe.attrs["src"]
        try:
            download_r = requests.get(download_url, headers=Hubber.head)
            download_r.raise_for_status()
            with open(path, "wb+") as temp:
                temp.write(download_r.content)
                print("\n"+"Article downloaded by doi!")
        except:
            print("\n"+"failed to download pdf by doi!\n" +url)
            Hubber.err_log(url)

    def err_log(url):
        with open("download_err.txt", "a+", encoding="utf-8") as error:
            error.write("PDF not found,download link may be: \n"+url +"\n")

    def getSoup(url):
        r = requests.get(url, headers=Hubber.head)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        soup = BeautifulSoup(r.text, "html.parser")
        return soup

    def getPDF(url,path):
        if os.path.exists(path) == True:
            print("\n" + "Article already exists")
        else:
            if (len(re.findall('pdf', url)) != 0):
                print ("\n"+'pdf link already!')
                Hubber.pdf_hub(url,path)
            elif re.match("https://www.sci-hub.ren/",url):
                print("\n" + 'sci_hub link!')
                url = str(url).replace("https://www.sci-hub.ren/","https://doi.org/")
                Hubber.sci_hub(path,url)
            #if pdf can be easily found!
            elif re.match("https://academic.oup.com/", url):
                soup = Hubber.getSoup(url)
                pdf_link ="https://academic.oup.com"+soup.find(class_="al-link pdf article-pdfLink").get('href')
                #print("\n"+pdf_link)
                Hubber.pdf_hub(pdf_link,path)
                '''
                doi = soup.select('div[class="ww-citation-primary"]')[0].a.get('href')
                #print("\n"+doi)
                Hubber.sci_hub(path,doi)
                '''
            elif re.match("https://content.iospress.com/", url):
                soup = Hubber.getSoup(url)
                pdf_link = soup.find(class_="btn btn-download btn-right get-pdf").get('href')
                # print("\n"+pdf_link)
                Hubber.pdf_hub(pdf_link, path)
            elif re.match("https://wwwnature.53yu.com/", url):
                soup = Hubber.getSoup(url)
                pdf_link = soup.find(class_="c-pdf-download__link").get('href')
                #print("\n"+pdf_link)
                Hubber.pdf_hub(pdf_link, path)
            elif re.match("https://bjo.bmj.com/", url):
                soup = Hubber.getSoup(url)
                pdf_link = soup.find(class_="article-pdf-download").get('href')
                pdf_link = "https://bjo.bmj.com" + pdf_link
                #print("\n"+pdf_link)
                Hubber.pdf_hub(pdf_link,path)
            elif re.match("https://jamanetwork.com/", url):
                soup = Hubber.getSoup(url)
                pdf_link = soup.find(class_="toolbar-tool toolbar-pdf al-link pdfaccess").get('data-article-url')
                pdf_link = "https://jamanetwork.com" + pdf_link
                #print("\n"+pdf_link)
                Hubber.pdf_hub(pdf_link, path)

            #if pdf can't be easily found,but doi can!
            elif re.match("https://sciencedirect.53yu.com/", url):
                soup = Hubber.getSoup(url)
                doi = soup.find(class_="doi").get('href')
                Hubber.sci_hub(path, doi)
            elif re.match("https://diabetes.diabetesjournals.org/", url):
                soup = Hubber.getSoup(url)
                doi = soup.select('.citation-doi')[0].a.get('href')
                Hubber.sci_hub(path, doi)
            elif re.match("https://journals.lww.com/", url):
                soup = Hubber.getSoup(url)
                doi = "https://doi.org/" + str(soup.find(id="ej-journal-doi").text).split("doi: ")[1]
                Hubber.sci_hub(path, doi)
            else:
                '''
                https://europepmc.org/
                https://iovs.arvojournals.org/
                https://linkspringer.53yu.com/
                '''
                print("\n"+"To be prettified!Download link may be: " +"\n" +url)
                Hubber.err_log(url)

if __name__ == '__main__' :
    url = "https://www.nature.com/articles/s41598-021-87315-7.pdf"
    url1 = "https://www.sci-hub.ren/doi:10.1067/mva.2003.139#"
    url2 = "https://www.sci-hub.ren/doi:10.1067/mva.2003.139#"
    Hubber.getPDF(url,"test.pdf")
    Hubber.getPDF(url1,"test1.pdf")
    Hubber.getPDF(url2,"test2.pdf")

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/183156.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 什么是 Hook 技术

    什么是 Hook 技术一、什么是Hook技术  Hook技术又叫做钩子函数,在系统没有调用该函数之前,钩子程序就先捕获该消息,钩子函数先得到控制权,这时钩子函数既可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递。简单来说,就是把系统的程序拉出来变成我们自己执行代码片段。  要实现钩子函数,有两个步骤:  1.利用系统内部提供的接口,通过实现该接口,然后注入进系统(特定场景下使用)  2.动态代理(使用所有场景)二、Hook技术实现的步骤  Hook技术实现的步骤也分为两步  1.找到ho

    2022年5月13日
    41
  • 基岩版服务器开启坐标显示,mc基岩版怎么看坐标 mc基岩版如何看坐标[通俗易懂]

    基岩版服务器开启坐标显示,mc基岩版怎么看坐标 mc基岩版如何看坐标[通俗易懂]mc基岩版如何看坐标我的世界地图有XYZ3个坐标,通过XYZ来显示你所处地图的区域。X-显示你在地图上的东/西位置,正数表示东,负数表示西。Y-显示你在地图上的海拔高度,整数表示位于地面上,负数表示位于地面下。Z-显示你在地图上的南/北位置,正数表示南,负数表示北。坐标可以显示为*位置和相对位置。02当坐标用数字显示时,则是*坐标,显示为地图上的特定地点。比如,1256163是一…

    2025年11月23日
    2
  • [原创] debian 9.3 搭建Jira+Confluence+Bitbucket+crowd+seafile (零) 修改端口的问题

    [原创] debian 9.3 搭建Jira+Confluence+Bitbucket+crowd+seafile (零) 修改端口的问题

    2021年6月9日
    91
  • c++反转链表中m位置到n位置的元素_环形数组最大子数组

    c++反转链表中m位置到n位置的元素_环形数组最大子数组原题链接给定一个由整数数组 A 表示的环形数组 C,求 C 的非空子数组的最大可能和。在此处,环形数组意味着数组的末端将会与开头相连呈环状。(形式上,当0 <= i < A.length 时 C[i] = A[i],且当 i >= 0 时 C[i+A.length] = C[i])此外,子数组最多只能包含固定缓冲区 A 中的每个元素一次。(形式上,对于子数组 C[i], C[i+1], …, C[j],不存在 i <= k1, k2 <= j 其中 k1 % A.leng

    2022年8月9日
    15
  • 小米6显示服务器出错,小米6解锁BL显示未连接手机解决办法以及各种小技巧汇总……

    小米6显示服务器出错,小米6解锁BL显示未连接手机解决办法以及各种小技巧汇总……本帖最后由为夫人而生于2017-6-2422:56编辑持续更新小米6未连接手机解决办法3:手机设置→关于手机→miui版本(一直点五次)→返回→更多设置→开发者选项→USB调试打开→手机绑定啥的解锁啥的都打开4:关机长按音量下加开机键出现兔子连接手机5:两种情况若显示连接直接解锁end;;;;;;;;;若显示没连接手机敲黑板重点来了右…

    2022年6月11日
    227
  • biztalk什么意思_aide教程网

    biztalk什么意思_aide教程网BizTalk开发系列(二十六) 使用Web Service

    2022年4月21日
    61

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号