2023届计算机专业弄潮儿如何快速找毕业论文文献?

人生苦短,我用Python

在这里插入图片描述

一、准备工作

软件选择

  • Python3.8
  • pycharm

模块

requests  #模拟请求
Selenium   # 浏览器自动化操作
  • win+r打开搜索框,输入cmd按确定打开命令提示符窗口,输入pip install 加上你要安装的模块名,
    回车即可安装,下载速度慢就换国内镜像源。
  • 然后要下载一个谷歌浏览器驱动,版本跟你的浏览器最相近的那个就行。

在这里插入图片描述

二、获取数据

页面分析

  • 首先分析一下页面元素,我们一般是在首页输入框中输入你想搜的内容,然后跳转到搜索页面。
    请添加图片描述
  • 我们通过浏览器的检查页面,得到输入框和搜索图标的XPATH分别为:
input_xpath = '/html[1]/body[1]/div[1]/div[2]/div[1]/div[1]/input[1]'
button_xpath =  '/html[1]/body[1]/div[1]/div[2]/div[1]/div[1]/input[2]'
  • 在输入框输入要搜索的内容,操作搜索按钮转到结果页。
  • 以搜索Python为例,共找到15,925条,300页,每页中包含20个条目,每个条目包含题目、作者、来源等等内容。
    请添加图片描述
  • 通过对当前页面分析发现每个条目对应的的xpath的规律
/html[1]/body[1]/div[5]/div[2]/div[2]/div[2]/form[1]/div[1]/table[1]/tbody[1]/tr[1]/td[2]
  • 就是倒数第二个标签数字代表本页的第几个条目,最后一个标签 2 - 6
    分别代表题目、作者、来源、发表时间和数据库。在当前页面无法或者文献的摘要信息,下载链接,需要进一步点击进入相关文献条目。
  • 进入详情页面后,根据class name:abstract-text 能够很容易定位到摘要的文本,class name:
    btn-dlcaj 定位到下载链接,其他元素也是一样的。
    请添加图片描述

请添加图片描述

三、开始写代码!

导入要用的库

import time 
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from urllib.parse import urljoin

创建浏览器对象,设置相关参数

get直接返回,不再等待界面加载完成

desired_capabilities = DesiredCapabilities.CHROME
desired_capabilities["pageLoadStrategy"] = "none"

设置谷歌驱动器的环境

options = webdriver.ChromeOptions()

设置chrome不加载图片,提高速度。

options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})

设置不显示窗口

options.add_argument('--headless')

创建一个谷歌驱动器

driver = webdriver.Chrome(options=options)

设置搜索主题

theme = "Python"
~~~python
**设置所需篇数**

papers_need = 100

**打开页面搜索关键词***打开页面*
~~~python 
driver.get("https://www.****.net")

网址我屏蔽了,各位自己换一下换成最大的那个查文献论文的网站。

传入关键字

WebDriverWait( driver, 100 ).until( EC.presence_of_element_located( (By.XPATH ,'''//*[@id="txt_SearchText"]''') ) ).send_keys(theme)

点击搜索

time.sleep(3)

点击切换中文文献

WebDriverWait( driver, 100 ).until( EC.presence_of_element_located( (By.XPATH ,"/html/body/div[5]/div[1]/div/div/div/a[1]") ) ).click()
time.sleep(1)

获取总文献数和页数

res_unm = WebDriverWait( driver, 100 ).until( EC.presence_of_element_located( (By.XPATH ,"/html/body/div[5]/div[2]/div[2]/div[2]/form/div/div[1]/div[1]/span[1]/em") ) ).text

去除千分位里的逗号

page_unm = int(res_unm/20) + 1
print(f"共找到 {res_unm} 条结果, {page_unm} 页。")

解析结果页

赋值序号,控制爬取的文章数量。

count = 1

当爬取数量小于需求时,循环网页页码。

while count <= papers_need:

等待加载完全,休眠3S。
在适当的地方加上 time.sleep(3) 延时几秒,既可以等待页面加载,也可以防止爬取太快被封IP。

time.sleep(3)title_list = WebDriverWait( driver, 10 ).until( EC.presence_of_all_elements_located( (By.CLASS_NAME  ,"fz14") ) )

循环网页一页中的条目

for i in range(len(title_list)):try:term = count%20   # 本页的第几个条目title_xpath = f"/html[1]/body[1]/div[5]/div[2]/div[2]/div[2]/form[1]/div[1]/table[1]/tbody[1]/tr[{term}]/td[2]"author_xpath = f"/html[1]/body[1]/div[5]/div[2]/div[2]/div[2]/form[1]/div[1]/table[1]/tbody[1]/tr[{term}]/td[3]"source_xpath = f"/html[1]/body[1]/div[5]/div[2]/div[2]/div[2]/form[1]/div[1]/table[1]/tbody[1]/tr[{term}]/td[4]"date_xpath = f"/html[1]/body[1]/div[5]/div[2]/div[2]/div[2]/form[1]/div[1]/table[1]/tbody[1]/tr[{term}]/td[5]"database_xpath = f"/html[1]/body[1]/div[5]/div[2]/div[2]/div[2]/form[1]/div[1]/table[1]/tbody[1]/tr[{term}]/td[6]"title = WebDriverWait( driver, 10 ).until( EC.presence_of_element_located((By.XPATH ,title_xpath) ) ).textauthors = WebDriverWait( driver, 10 ).until( EC.presence_of_element_located((By.XPATH ,author_xpath) ) ).textsource = WebDriverWait( driver, 10 ).until( EC.presence_of_element_located((By.XPATH ,source_xpath) ) ).textdate = WebDriverWait( driver, 10 ).until( EC.presence_of_element_located((By.XPATH ,date_xpath) ) ).textdatabase = WebDriverWait( driver, 10 ).until( EC.presence_of_element_located((By.XPATH ,database_xpath) ) ).text

点击条目

title_list[i].click()

获取driver的句柄

n = driver.window_handles 

driver切换至最新生产的页面

driver.switch_to_window(n[-1])  

开始获取页面信息

# title = WebDriverWait( driver, 10 ).until( EC.presence_of_element_located((By.XPATH ,"/html/body/div[2]/div[1]/div[3]/div/div/div[3]/div/h1") ) ).text
# authors = WebDriverWait( driver, 10 ).until( EC.presence_of_element_located((By.XPATH ,"/html/body/div[2]/div[1]/div[3]/div/div/div[3]/div/h3[1]") ) ).text
institute = WebDriverWait( driver, 10 ).until( EC.presence_of_element_located((By.XPATH ,"/html[1]/body[1]/div[2]/div[1]/div[3]/div[1]/div[1]/div[3]/div[1]/h3[2]") ) ).text
abstract = WebDriverWait( driver, 10 ).until( EC.presence_of_element_located((By.CLASS_NAME  ,"abstract-text") ) ).text
try:keywords = WebDriverWait( driver, 10 ).until( EC.presence_of_element_located((By.CLASS_NAME  ,"keywords") ) ).text[:-1]
except:keywords = '无'
url = driver.current_url

获取下载链接

link = WebDriverWait( driver, 10 ).until( EC.presence_of_all_elements_located((By.CLASS_NAME  ,"btn-dlcaj") ) )[0].get_attribute('href')
link = urljoin(driver.current_url, link)

写入文件

res = f"{count}\t{title}\t{authors}\t{institute}\t{date}\t{source}\t{database}\t{keywords}\t{abstract}\t{url}".replace("\n","")+"\n"
print(res)
with open('CNKI_res.tsv', 'a', encoding='gbk') as f:f.write(res)

跳过本条,接着下一个。
如果有多个窗口,关闭第二个窗口, 切换回主页

except:print(f" 第{count} 条爬取失败\n")continuefinally:
n2 = driver.window_handles
if len(n2) > 1:driver.close()driver.switch_to_window(n2[0])

计数,判断需求是否足够。

count += 1
if count == papers_need:break

切换到下一页

WebDriverWait( driver, 10 ).until( EC.presence_of_element_located( (By.XPATH ,"//a[@id='PageNext']") ) ).click()

关闭浏览器

driver.close()

四、效果展示

不小心截大了嘿嘿~

省流:保存为数据格式

请添加图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/63993.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记录一下计算机专业毕业论文用到的在线网站

写在前面的话&#xff1a; 在毕业设计完成期间&#xff0c;用到的还算顺手的网站&#xff0c;我个人觉得写论文的时候用WPS好一点&#xff0c;就是有点卡。 文档文献查找&#xff0c;无非就是知网&#xff0c;万方&#xff0c;学校图书馆一般都有入口。 processOn流程图&…

chatgpt赋能python:迭代器是什么?

迭代器是什么&#xff1f; 在Python编程语言中&#xff0c;迭代器是常见的编程工具。迭代器是一个对象&#xff0c;它允许您遍历容器中的元素。我们可以使用迭代器来访问序列&#xff0c;字典和集合等Python容器的元素。通过使用迭代器&#xff0c;我们可以访问容器中的元素一…

时序数据库-TDengine涛思(taos)使用以及踩坑

时序数据库 时序数据库(Time Series Database&#xff0c;TSDB) 全称为时间序列数据库。时间序列数据库指主要用于处理带时间标签&#xff08;按照时间的顺序变化&#xff0c;即时间序列化&#xff09;的数据&#xff0c;带时间标签的数据也称为时间序列数据 通过 DB-Engines…

chatgpt赋能Python-python迭代法

介绍 Python是一种被广泛应用于科学计算、人工智能、Web开发等领域的编程语言&#xff0c;迭代法(iterative method)是Python中非常重要的一种算法。迭代法是指通过不断重复执行某一操作从而逐步接近问题的解。在Python中&#xff0c;我们通常使用循环语句来实现迭代算法。 迭…

chatgpt赋能python:Python里的迭代器:如何利用这个强大的工具

Python里的迭代器&#xff1a;如何利用这个强大的工具 Python是一种流行的编程语言&#xff0c;它具有许多强大的功能来帮助您编写高效的代码。其中一个功能就是迭代器。在 Python 中&#xff0c;迭代器是从可迭代对象&#xff08;Iterables&#xff09;创建的对象&#xff0c…

自动售卖机的类型和工作流程分析

线上经济的崛起提高了人们的生活品质&#xff0c;促进了我国市场经济的发展。随着互联网的快速发展&#xff0c;线上经济资源已经饱和&#xff0c;线上和线下资源整合已经成为市场经济发展的方向&#xff0c;而自动售卖机正是线上和线下经济发展的连接纽带。 自动售卖机作为无人…

「应用案例」科聪赋能拣选AMR系统,落地新加坡新零售行业

在新零售浪潮推动下及人工智能等无人化技术日趋成熟的背景下&#xff0c;无人值守的新业态层出不穷&#xff0c;无人售货以自助购物、即时享受、移动支付等特点俘获了无数消费者。在互联网时代&#xff0c;无人售货在年轻消费群体中的接受度很高。 然而当货柜缺货时&#xff0c…

自动售卖系统开发系列——人脸识别自动售卖机三代BrotherSharp

大纲&#xff1a; 售卖机三代BrotherSharp的简介 售卖机三代BrotherSharp的方案介绍 #系统整体组成 #软件平台 #硬件平台 售卖机三代BrotherSharp的实现过程 #功能实现论述 #软件流程图 #源码 售卖机三代BrotherSharp的技术难点解析 参考文献 #售卖机三代BrotherSharp的简介…

基于FPGA的自动售货机

目录 一、项目功能 二、设计思路 按键实现&#xff1a; 数码管 蜂鸣器 LED灯 三、流程图 四、代码实现 1、按键消抖 key_debounce.v 2、LED状态选择 led_drive.v 3、蜂鸣器模块 beep_drive.v 4、数码管位选信号选择 sel_drive.v 5、数码管段选信号选择 seg…

基于FPGA的售货机

文章目录 一、要求二、效果三、设计思路1.按键2.数码管3.LED4.蜂鸣器 四、程序流程图五、项目RTL视图六、代码实现1.按键消抖2.售货机3.LED4.数码管5.音乐播放6.蜂鸣器7.顶层模块 七、仿真 一、要求 默认只接收0.5元、1元投币。货物为2.5元。满足2.5元后自动出货&#xff0c;出…

自动售卖系统开发系列——人脸识别自动售卖机二代ChingTom

大纲&#xff1a; 售卖机二代ChingTom的简介 售卖机二代ChingTom的方案介绍 #系统整体组成 #软件平台 #硬件平台 售卖机二代ChingTom的实现过程 #业务逻辑介绍 #软件流程图 #源码 售卖机二代ChingTom的技术难点解析 #售卖机二代ChingTom的简介 自动售卖机ChingTom是基于人脸…

无人售货机如何更智能?

行业现状 随着互联网经济渗透生活&#xff0c;无人零售行业的业务发展变得更加多样化。各类零售功能的自助售货机如饮料售货机、自助榨汁机、自助咖啡机、自助售酒机、盒饭售货机遍布城市大街小巷。新冠疫情之后&#xff0c;更是大量涌现口罩自动售货机、自助售药机等医药无人零…

医日健自助售药机

产品概述 医日健智能自助售药机整合了信息化管理技术 、远程监控管理技术 、自动化技术、人脸识别技术等多种先进技术 &#xff0c;结合药品零售的特点 &#xff0c;通过在医院、诊所、药店、便利店、社区等场所部署药品自助售药机 &#xff0c;为用户提供自选购药服务&#x…

医院买药也能自助? 揭秘24小时营业的AI售药机

疫情期间&#xff0c;你是否会期待&#xff0c;医院的人工取药窗口也能实现“无接触”&#xff1f;是否希望在突发状况时&#xff0c;可以避免等待&#xff0c;第一时间就能买到急需药品&#xff1f;现在&#xff0c;药品 AI 售卖机的出现&#xff0c;让这一切问题都得到了解决…

python自动售货机

说明 分享python实现自动售货一个小作业 主要功能 1.查询商品列表 2.购买商品 输入2进行购买商品,输入商品id和数量&#xff0c;可以选择不同商品&#xff0c;最后进行结账操作。 3.订单查询 可以有两种查询方式,全部查询和按时间条件查询 具体操作如下: 全部查询&#x…

程序员的新出路:维护老项目?

1 张大胖刚进入公司&#xff0c;遇到了一个神奇的同事&#xff1a;何小痩。 别人工作都很忙&#xff0c; 何小痩工作似乎特别轻松&#xff0c;从来不加班&#xff0c;到点儿就回家。 张大胖向别人一打听&#xff0c;原来何小痩一直在维护一个老项目&#xff0c;维护了5年了。 …

为什么说程序员唯一出路是变成超级个体?

先来看一篇昨天AI新智能的报道&#xff0c; Midjourney 是 AI 绘画工具头部公司&#xff0c; 每年1亿美金的营收&#xff0c; 已经累计1000多万用户&#xff0c; 这么伟大的公司&#xff0c;仅仅只有11人。 Amazing! 你会震惊&#xff1a;真是家神奇的公司。 在 ChatGPT 新时代…

数据可视化①:dashboard展示大学生就业现状

大学生就业是和我们息息相关的话题&#xff0c;每一位大学生都关注着&#xff0c;我们常常在网络上看到有关大学生就业的话题&#xff0c;比如毕业季的一些讨论。在大一的创新创业课中&#xff0c;我们也了解到自己所学的专业和以后如何就业&#xff0c;往哪方面就业。但我们了…

基于数据挖掘的大学生智慧就业双向推荐系统

目 录 摘 要 I Abstract II 1 引言 1 1.1选题背景及目的意义 1 1.1.1选题背景 1 1.1.2目的及意义 1 1.2研究现状 2 1.3研究主要内容及结构 3 2 相关理论和开发工具 4 2.1 数据挖掘简述 4 2.2 相关数据挖掘算法概述 4 2.2.1关联规则 4 2.2.2 聚类算法 5 2.2.3 分类算法 5 2.3 文…

python项目之基于大数据分析算法的大学生就业系统

目录 一、使用技术及功能模块 二、具体操作及界面展示 &#xff08;一&#xff09;普通用户 &#xff08;二&#xff09;系统管理员 三、各个模块的具体代码实现 系统仅供学习用&#xff01; 一、使用技术及功能模块 采用python语言和django的web框架&#xff0c;使用B/S模…