学妹需要查询一批文献的引证文献数据,采集指定文章的引证文献数据
采集思路
学妹提供的数据为题名+作者。
在高级检索界面输入主题及作者,拿到文章链接以及引证文献列表链接。为避免被参数困扰,数量不多的情况就直接使用selenium。若出现多条返回结果,则可以在筛选框筛选出显示50条及按相关度排序,这样基本上在第一页就可以拿到相应数据,无需翻页。
拿到引证文献列表链接后开始采集每篇引证文献的链接。期刊、博士等每个类目下都有分页,每页10条。此时selenium最为简单方便。
具体思路如下:
先解析出期刊等每个类目的标签(‘div[@class=“essayBox”]’);
再遍历每个essayBox标签,解析出数量;
若数量小于10条,直接解析即可;
若大于10条,先解析再翻页,直到翻到最后一页。
拿到引证文献的链接,就可以愉快的采集相应文献的数据了!
代码
引入相关包
# -*- coding: utf_8 -*-
import os
import time
import random
import pandas as pd
from lxml import etree
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
设置远程调试
options = Options()
options.debugger_address = "127.0.0.1:9299"
browser = webdriver.Chrome(chrome_options=options)
手动启动浏览器
CMD: 浏览器路径 + --remote-debugging-port=9299
def get_data_list(essayBox_index):
"""
:param essayBox_index: 分类标签的索引
:return: 当前标签下所有文献标题及链接
"""
data_list = []
res = browser.page_source
xpath_str = f'//div[@id="divResult"]/div[@class="essayBox"][{
essayBox_index}]'
info = etree.HTML(res)
data_list_info = info.xpath(xpath_str)[0]
data_list_1 = [f"https://kns.cnki.net{
i}" for i in data_list_info.xpath('./ul/li/a/@