美文网首页
selenium 下载百度学术引文

selenium 下载百度学术引文

作者: EZ | 来源:发表于2020-05-13 16:46 被阅读0次

    在参考文献 的引用中,手动插入引用文献较慢,尝试批量下载需要的文献引文
    学了下selenium ,完成了第一个爬虫,基本用了一个星期看完了up白月白月黑羽的教学视频,感谢。
    果然是书到用时放恨少,还是会遇到很多问题,
    嵌套了很多个 try except代码块,应该有比较优雅的操作吧

    #!/usr/bin/env python
    # coding: utf-8
    # usage:  python path/to/bdduxtuu.python  path/to/yourinputfile
    import os
    from selenium import webdriver
    import time
    from selenium.webdriver.common.action_chains import ActionChains
    import sys
    import re
    #os.chdir(r'C:\Users\Acer\Desktop\lalal')
    
    inputfile = sys.argv[1]
    bx = webdriver.Chrome()
    bx.implicitly_wait(3)
    bx.get('https://xueshu.baidu.com/')
    bx.maximize_window()
    #登陆检查
    
    try:
        bx.find_element_by_id('lb').click()
    except:
        print("已经登录")
    else:
        print("正在登录......")
    while True:
        try:
            xbxi = bx.find_element_by_id('imsg')
           
        except:
            time.sleep(3)
        else:
            print("登陆成功")
            break
            
    #得到作者信息 多结果页面 与下载到得引用文章手动看一下是否相同
    def get_zv1():
        sc_info = bx.find_element_by_xpath("(//div[@class='sc_info'])[1]").text
        zove = re.sub("[\s,(...))]","",sc_info)
        title = bx.find_element_by_xpath('//div[@id="1"]//h3/a').text
        print(zove + "-" + title)
    
    #得到作者信息 单独页面
    def get_zv2():
        zove = bx.find_element_by_xpath('//p[@class="author_text"]').text
        title = bx.find_element_by_xpath('//div[@class="main-info"]//h3/a').text
        year = bx.find_element_by_xpath('//div[@class="year_wr"]/p[2]').text
        print(zove + "-"+ title + "-" + year)
    
    #dowdload
    def downwx():
        bx.find_element_by_xpath('/html/body/div[3]/div[1]/div[1]').click() #点击引用数量
        time.sleep(5) #wait umtil contens appear
        ac = ActionChains(bx)
        ac.move_to_element(bx.find_element_by_xpath('/html/body/div[3]/div[2]/div[2]/div[1]/div[1]')).perform() #move to 导出至
        time.sleep(1)     #等待选项出现,
        bx.find_element_by_xpath('/html/body/div[3]/div[2]/div[2]/div[1]/div[2]/div/ul/li[4]/a').click() #点击下载得格式
        bx.find_element_by_xpath('/html/body/div[3]/div[2]/div[2]/a[1]').click() #清空列表
        bx.find_element_by_xpath('/html/body/div[3]/div[2]/div[1]/i').click() #close this window
    
    
    with open(inputfile,'r') as cjwx:
        ck = cjwx.readlines()
    
    num = 0
    for line in ck:
        bx.find_element_by_id('kw').clear()
        bx.find_element_by_id('kw').send_keys(line)
        while True:
            try:
                uull = bx.find_element_by_xpath('/html/body/div[3]/div[1]/div[1]/span').get_attribute('innerHTML')
            except:
                break
            else:
                if int(uull) == 30:#单次最大批量引用数30个
                    downwx()
                break
    
        while True:
            try:
                bx.find_element_by_xpath('(//a[@class="sc_batch"])[1]').click()
                num += 1
                #第一个出现的批量引用包含多个结果页面和一个单独结果页面
                #bx.find_element_by_xpath("//div[@id='1']//a[@class='sc_batch']").click()
                #用带有id的绝对xpath路径,当非常匹配时跳转到文献单独页面,不能点击批量引用了
            except:
                    try:
                        bx.find_element_by_xpath('(//a[@class="sc_batch batched"])[1]')
                        #第一个是否被点击
                    except:
                        print("文献: "+line.strip()+" 未发现")
                        break
                    else:
                        print("已点击批量引用")
                        break
                    print("批量引用无法点击")
                    break
            else:
                print("="*40)
                print(line)
                try:
                    get_zv1()
                except:
                    get_zv2()
                break
            #当查找不到文献时,查找不到引用数量,每次成功点击后查看已经批量引用得数字,也可判断所有情况后查找
    #for loop stop , download the current wfxm
    downwx()
    print(str(num) + "个文献引文被查找到并下载")
    bx.quit()
    
    

    相关文章

      网友评论

          本文标题:selenium 下载百度学术引文

          本文链接:https://www.haomeiwen.com/subject/fcxonhtx.html