当前位置: 首页 > article >正文

爬虫入门指南-某专利网站的专利数据查询并存储

免责声明

本教程仅用于教育目的,演示如何合法获取公开专利数据。在实际操作前,请务必:

1.  仔细阅读目标网站的robots.txt文件和服务条款
2.  控制请求频率,避免对服务器造成负担
3.  仅获取和使用公开数据
4.  不用于商业用途或大规模抓取

本次教学网站:aHR0cDovL2VwdWIuY25pcGEuZ292LmNuL0FkdmFuY2Vk(请自行base64解密)。

本次实现需求:1.查询某固定日期之后的所有专利 2.将获取到的专利数据写入xlsx文件

本次使用语言:python

实现思路:DrissionPage实现自动化操作网页,向公布开始日期的输入框插入需要查询的日期(若需要其他查询条件思路与其基本一致),点击查询按钮跳转至专利数据列表页面,获取总计页面数量,循环总计页面数量,自动获取并向xlsx文件写入每一页数据,如果当前页不是最后一页,点击下一页继续获取数据并完成写入。

程序输出结果:

完整代码

from DrissionPage import ChromiumOptions, ChromiumPage
import re
from bs4 import BeautifulSoup
from DataRecorder import Recorderco = ChromiumOptions()
co.headless()  # 无头模式
# 创建页面对象,并启动浏览器
page = ChromiumPage(co)
# 跳转到页面
page.get('http://epub.cnipa.gov.cn/Advanced')
start_date = '2022.10.18'
r = Recorder(f'专利网_{start_date}.xlsx')
r.set.head(['标题', '申请公布号', '申请公布日', '申请号', '申请日', '申请人', '发明人', '地址', '分类号', '摘要'])
r.record()def save_data(datalist):r.add_data(datalist)r.record()# 定位到开始日期文本框,获取文本框元素
ele = page.ele('#pd_begin')
# 输入对文本框输入开始日期
ele.input(start_date)
# 定位到页面文本为“查询”的按钮并点击
search_button = page.ele('.icon-sea')
search_button.click()
page.wait(5)total_element = page.ele('css:.page_total')
total_content = total_element.text
# 正则提取页数
page_num = re.search(r'共 (\d+) 页', total_content).group(1)
print(f'总页数:{page_num}')  # 输出:总页数:****now_page = 1
max_page = int(page_num)
data_list = []def get_data():res = page.ele('#result')items = res.eles('css:.item')list_arr = []for item in items:title = item.ele('.title').textpublication_num = item.ele('.info').eles('tag:dd')[0].textpublication_date = item.ele('.info').eles('tag:dd')[1].textapplication_num = item.ele('.info').eles('tag:dd')[2].textapplication_date = item.ele('.info').eles('tag:dd')[3].textapplicant = item.ele('.info').eles('tag:dd')[4].textinventor = item.ele('.info').eles('tag:dd')[5].textaddress = item.eles('.intro')[0].eles('tag:dd')[0].texttype_num = item.eles('.intro')[1].eles('tag:dd')[0].textdes = item.eles('.intro')[2].eles('tag:dd')[0].textif item.eles('.intro')[2].eles('tag:dd')[0].ele('tag:p'):des_dom = item.eles('.intro')[2].eles('tag:dd')[0].ele('tag:p').htmlsoup = BeautifulSoup(des_dom, 'html.parser')for tag in soup.find_all(class_=['point', 'open j-open-alltxt']):tag.decompose()des = soup.get_text(strip=True).replace('\n', ' ')arr = [title, publication_num, publication_date, application_num, application_date, applicant, inventor,address, type_num, des]print(arr)list_arr.append(arr)save_data(list_arr)def get_page_data():if now_page == 1:get_data()else:next_button = page.ele('.next_page')page.wait(2)next_button.click()page.wait(3)get_data()for i in range(1, max_page + 1):now_page = iprint(f'正在获取第{i}页数据')get_page_data()page.quit()

http://www.lryc.cn/news/2395148.html

相关文章:

  • SQL(Database Modifications)
  • 【android bluetooth 案例分析 04】【Carplay 详解 2】【Carplay 连接之手机主动连车机】
  • maven离线将jar包导入到本地仓库中
  • 【仿muduo库实现并发服务器】实现时间轮定时器
  • Conda更换镜像源教程:加速Python包下载
  • 蓝桥杯 盗墓分赃2
  • 深度解读 Qwen3 大语言模型的关键技术
  • 使用 mysqldump 获取 MySQL 表的完整创建 DDL
  • day15 leetcode-hot100-28(链表7)
  • 阿里云云效对接SDK获取流水线制品
  • Qt 相关 编译流程及交叉编译 部署所遇到的问题总结-持续更新
  • 前端面经 DNSxieyi1
  • 如何通过ES实现SQL风格的查询?
  • ​​知识图谱:重构认知的智能革命​
  • 【计算机网络】4网络层①
  • MATLAB中的table数据类型:高效数据管理的利器
  • Dropout 在大语言模型中的应用:以 GPT 和 BERT 为例
  • CentOS 7 如何安装libsndfile?
  • 基于深度学习的语音识别系统设计与实现
  • gitLab 切换中文模式
  • 133.在 Vue3 中使用 OpenLayers 实现画多边形、任意编辑、遮罩与剪切处理功能
  • 4.8.4 利用Spark SQL实现分组排行榜
  • 40. 自动化异步测试开发之编写异步业务函数、测试函数和测试类(类写法)
  • 【五子棋在线对战】一.前置知识的了解
  • 历年中国科学技术大学计算机保研上机真题
  • 内联盒模型基本概念?——前端面试中的隐形考点剖析
  • HackMyVM-Art
  • 网页前端开发(基础进阶1)
  • const ‘不可变’到底是值不变还是地址不变
  • 如何找到一条适合自己企业的发展之路?