知网论文信息获取selenium

该博客展示了如何利用Python的Selenium库自动化访问CNKI数据库,输入查询条件并抓取论文的基本信息,如题名、来源、发表时间和数据库。程序会将抓取的数据保存到Excel表格中,便于进一步分析。
from selenium import webdriver
import time
import xlrd
import xlwt
import os
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import numpy
from selenium.webdriver.common.by import By
import re
def get(name1,name2):
    driver = webdriver.Chrome(executable_path='D:\chromweb\chromedriver.exe')

    wait = WebDriverWait(driver, 300)
        # 定义窗口最大化
    driver.maximize_window()
    driver.get(
        'https://kns.cnki.net/kns8/AdvSearch?dbprefix=SCDB&&crossDbcodes=CJFQ%2CCDMD%2CCIPD%2CCCND%2CCISD%2CSNAD%2CBDZK%2CCJFN%2CCCJD')
    wait.until(EC.element_to_be_clickable(
        (By.XPATH, '//ul[@class="search-classify-menu"]/li[4]'))).click()
    # 找到输入框
    input = wait.until(
        EC.presence_of_element_located((By.XPATH, '//textarea[@class="textarea-major ac_input"]'))
    )
    # 类点击,然后输入查询主题或关键字
    input.clear()
    input.send_keys(name1)
    # 显示等待
    wait.until(
        EC.element_to_be_clickable((By.XPATH, '//input[@class="btn-search"]'))
    ).click()

    time.sleep(3)
    total = driver.find_element_by_xpath('//*[@id="countPageDiv"]/span/em')
    total = total.text
    print(name2 + "一共有" + total + "条数据")
    total = re.sub("\D", "", total)
    page = (int(total) // 20) + 1
    print('一共有{}'.format(page) + '页文章')
    df = xlwt.Workbook()
    sheet1 = df.add_sheet('bookname', cell_overwrite_ok=True)
    rowsTitle = [u'题名', u'来源', u'发表时间', u'数据库']
    for i in range(len(rowsTitle)):
        sheet1.write(0, i, rowsTitle[i])

    for p in range(page):
        for i in range(1, 21):
            try:
                ctitle = driver.find_element_by_xpath('//*[@id="gridTable"]/table/tbody/tr[{}]/td[2]'.format(i)).text
                csource = driver.find_element_by_xpath('//*[@id="gridTable"]/table/tbody/tr[{}]/td[4]/a'.format(i)).text
                cdatatime = driver.find_element_by_xpath('//*[@id="gridTable"]/table/tbody/tr[{}]/td[5]'.format(i)).text
                cdatabase = driver.find_element_by_xpath('//*[@id="gridTable"]/table/tbody/tr[{}]/td[6]'.format(i)).text

                sheet1.write(p*20+i, 0, ctitle)
                sheet1.write(p*20+i, 1, csource)
                sheet1.write(p*20+i, 2, cdatatime)
                sheet1.write(p*20+i, 3, cdatabase)
                df.save('E:\cnki\信息.xls')
            except:
                print(str(int(p)+1)+'页未抓取到')
        print('已抓取第'+str(int(p)+1)+'页')
        flag4 = driver.find_element_by_xpath('//*[@id="PageNext"]')

        driver.execute_script("arguments[0].scrollIntoView();", flag4)
        flag4.click()
        time.sleep(10)

def isElementExist(element):
    flag = True
    try:
        driver.find_element_by_xpath(element)
        return flag
    except:
        flag = False
        return flag
if __name__ == '__main__':
    name1 = "TI='经济'"
    name2 = '经济'
    get(name1,name2)

这个和之前的那个相似,但是目的是为了获取论文信息,而不是下载论文。

### 使用Python爬取中国(CNKI)的论文信息 要实现对中国(CNKI)论文信息的爬取,通常会涉及以下几个核心技术栈:`requests`库用于发送HTTP请求、`Selenium`工具模拟浏览器行为以及`BeautifulSoup`库解析HTML页面内容。以下是详细的说明和代码示例。 #### 1. 准备工作 在开始之前,需安装必要的依赖包: ```bash pip install requests beautifulsoup4 selenium pandas ``` 如果使用`Selenium`,还需要下载对应版本的WebDriver(如ChromeDriver),并确保其路径已配置到环境变量中[^1]。 #### 2. 设置User-Agent头 为了防止被目标站识别为自动化脚本而封禁IP地址,设置合理的`User-Agent`非常重要。例如: ```python headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' } ``` 此部分可参考用户代理字符串的设计方法[^5]。 #### 3. 发送请求获取初始页面数据 利用`requests.get()`函数加载首页或者特定主题下的搜索结果页。注意处理可能存在的反爬机制,比如动态加载的内容或验证码验证等问题。 ```python import requests search_url = "https://kns.cnki.net/kns/brief/result.aspx?dbprefix=CJFQ&kw=人工智能" response = requests.get(search_url, headers=headers) if response.status_code == 200: html_content = response.text else: raise Exception(f"Failed to retrieve data with status code {response.status_code}") ``` #### 4. 解析HTML文档提取所需字段 借助于`BeautifulSoup`解析器定位具体的标签结构,从而抽取文章标题、作者列表以及其他元数据项。 ```python from bs4 import BeautifulSoup soup = BeautifulSoup(html_content, 'html.parser') titles = soup.find_all('a', class_='fz14') # 假设这是存放标题的地方 for title_tag in titles[:10]: print(title_tag.string.strip()) ``` 上述逻辑基于假设性的CSS选择器,请根据实际情况调整匹配规则[^2]。 #### 5. 处理分页情况遍历全部记录 当单次查询返回的结果超过一页时,则需要循环调用后续各页URL继续抓取剩余的数据集。 ```python base_pagination_link = "/kns/brief/default_result.aspx?page={}&..." total_pages = ... # 计算总共有多少页 all_items = [] for page_num in range(1, total_pages + 1): current_page_url = base_pagination_link.format(page_num) resp = requests.get(current_page_url, headers=headers).text parsed_data = parse_single_page(resp) # 自定义辅助功能完成具体解析操作 all_items.extend(parsed_data) ``` #### 6. 存储采集成果至文件或其他形式载体 最后一步就是把收集来的资料保存下来供进一步分析之用。这里可以选择CSV格式作为输出介质之一。 ```python import pandas as pd df = pd.DataFrame(all_items, columns=['Title', 'Author', 'Journal']) output_file_path = './cnki_papers.csv' df.to_csv(output_file_path, index=False, encoding='utf_8_sig') print(f"All papers have been saved into '{output_file_path}'.") ``` 以上流程涵盖了从准备阶段直至最终导出环节的主要步骤概述[^3][^4]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值