[数据爬取】国家知识产权局(2008及以后)专利统计数据的收集(request+lxml+selenium)

这篇具有很好参考价值的文章主要介绍了[数据爬取】国家知识产权局(2008及以后)专利统计数据的收集(request+lxml+selenium)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【数据爬取】国家知识产权局(2008及以后)专利统计数据的收集(request+lxml+selenium)

前言

寒假里补数据分析课的实验报告,断断续续写了三四天,在这里记录下我稚嫩的代码。还有许多值得改进的地方,希望和大家互相学习。

任务要求

1、 百度搜索:国家知识产权局首页,打开以上链接

点击“数据”,找到“国家知识产权局统计年报”,输入年份,点击查询
[数据爬取】国家知识产权局(2008及以后)专利统计数据的收集(request+lxml+selenium)

2、 获取各年专利统计年报的子页面专利申请状况、专利申请授权状况、专利有效状况、专利行政执法状况的url。(提示由于url类似,可以考虑直接生成)
[数据爬取】国家知识产权局(2008及以后)专利统计数据的收集(request+lxml+selenium)

3、获取专利申请状况(专利申请授权状况、专利有效状况、专利行政执法状况做相同处理)子页面的所有url,
[数据爬取】国家知识产权局(2008及以后)专利统计数据的收集(request+lxml+selenium)

4、抓取对应页面的表格数据,并且输出到excel中
[数据爬取】国家知识产权局(2008及以后)专利统计数据的收集(request+lxml+selenium)

最终效果图

[数据爬取】国家知识产权局(2008及以后)专利统计数据的收集(request+lxml+selenium)直接下载在了python文件目录
[数据爬取】国家知识产权局(2008及以后)专利统计数据的收集(request+lxml+selenium)

思路

一共有两种思路,第一种做着做着做不下去了,太笨太麻烦了;我最后用的是第二种

思路一

直接获取子url里每个表格的源码,用xpath解析表格里的数据,然后将数据整理写进excel中。

import requests
from lxml import etree
header1={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54'
}
page_text = requests.get(url='https://www.cnipa.gov.cn/tjxx/jianbao/year2018/a/a1.html', headers=header1).text
tree=etree.HTML(page_text)
title=tree.xpath('//body/table[2]/tr/td/b/span/text()')
tr_list=tree.xpath('/html/body/table[4]/tr')

for lines in range(len(tr_list)):
    a1line=get_a1line(lines,tr_list)
    print(a1line)

下面是整理之前的数据:
[数据爬取】国家知识产权局(2008及以后)专利统计数据的收集(request+lxml+selenium)

下面是整理所用的方法:(很笨)

def get_a1line(lines,tr_list):
    line = tr_list[lines].xpath('./td//text()')
    if lines==0:
        line0=['','','','','','']
        for j in [1,3,5,7]:
            line0.insert(j+1,line[j])
        return line0
    if lines==1:
        line1=['','']
        for j in [0,2,4,6,8,10,12,14]:
            line1.append(line[j])
        return line1
    if lines in (2,5,8):
        del line[1]
        del line[2]
        return line
    else:
        del line[1]
        line_new=['']
        line_new=line_new+line
        return line_new

而且后面还要用到合并表格的一系列麻烦操作,而且每个表格得重新写这个方法,总共有百八十个表格,我最终放弃了……

思路二

后面我观察表格页面,下面有一个下载按钮,点击可以直接下载excel表格,因此要做的就只是定位每个表格页面这个按钮,并将文件下载到指定位置就好!!主要就是用到了selenium.

下面是主程序

import requests
import os
from selenium import webdriver
from lxml import etree
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options

#首先以年为单位,然后是四个类型,每个类型下有十多个表格
if __name__ == '__main__':
    header1 = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54'
    }
    for year in range(2009,2022):
        #新建目录
        mkdir(r'./十年情况/' + str(year))
        for index1 in ['a','b','c','h']:
            url1="https://www.cnipa.gov.cn/tjxx/jianbao/year{}/{}.html".format(year,index1)
            #获取每个子页面下的表格数量
            excel_number=get_excels(url1)
            #遍历
            for index2 in range(1,excel_number+1):
                #下载excel到指定位置
                download_excel(year, index1,index2)

下面是用到的一些方法

#新建文件夹
def mkdir(path):
    isExists = os.path.exists(path)
    # 判断结果
    if not isExists:
        # 如果不存在则创建目录
        # 创建目录操作函数
        os.makedirs(path)

#获取该页面下子url的数量(表格的数量)
def get_excels(url1):
    page_text = requests.get(url=url1, headers=header1).text
    tree = etree.HTML(page_text)
    tr_list = tree.xpath('/html/body/table[2]/tr')
    return len(tr_list)

下面这个方法是关键,有两个关键点,首先是启动参数的设置,然后就是观察下载按钮的xpath路径规律

def download_excel(year,index1,index2):
    #编写一个字典,方便文件夹命名,增加可读性
    dict = {'a': '专利申请受理状况',
            'b': '专利申请授权情况',
            'c': '专利有效状况',
            'h': '专利行政执法状况'
            }
    #设置启动参数
    options=Options()
    #启动参数列表:默认不加载图片;设置默认下载路径
    prefs = {"profile.managed_default_content_settings.images": 2,
             "download.default_directory": 'D:\pythonProject1\python数据分析\实验报告一\十年情况\{}\{}'.format(year,dict[index1])}
    options.add_experimental_option("prefs", prefs)
    #使用无头浏览器
    options.add_argument('--headless')
    #禁用GPU加速功能
    options.add_argument('--disable-gpu')
    # 实例化一个浏览器对象
    chrome_path = r"C:\Program Files\Google\Chrome\Application\chromedriver.exe"
    bro = webdriver.Chrome(executable_path=chrome_path,chrome_options=options)

    excel_url = "https://www.cnipa.gov.cn/tjxx/jianbao/year{}/{}/{}{}.html".format(year,index1,index1,index2)
    # 让浏览器发起一个网页请求
    bro.get(excel_url)

    #定位下载按钮
    # 获取每个表格里下载按钮所在的位置(行数)
    page_text = requests.get(url=excel_url, headers=header1).text
    tree = etree.HTML(page_text)
    table_list = tree.xpath('/html/body/table')
    cols=len(table_list)
    btn_download = bro.find_element(By.XPATH, r'/html/body/table[{}]/tbody/tr/td[2]'.format(cols))
    # /html/body/table[6]/tbody/tr/td[2]
    # /html/body/table[5]/tbody/tr/td[2]
    # /html/body/table[5]/tbody/tr/td[2]
    # /html/body/table[6]/tbody/tr/td[2]
    # /html/body/table[5]/tbody/tr/td[2]
    #/html/body/table[3]/tbody/tr/td[2]

    #点击下载按钮
    btn_download.click()
    sleep(3)

小结

这第二种思路和第一种比起来真的简便了许多,然后写的过程中自己也学到了很多,代码里需要改进的地方欢迎大家提意见,互相交流!文章来源地址https://www.toymoban.com/news/detail-433601.html

到了这里,关于[数据爬取】国家知识产权局(2008及以后)专利统计数据的收集(request+lxml+selenium)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Sql】Sql Server 2008 数据库附加,错误:9004

    【问题描述】 数据库文件存在异常状况,有可能是因为硬盘有坏区引起的。 附加数据库的时候,提示错误9004。 【解决方法】 假设数据库名称为:UFDATA_001_2023 请按顺序执行以下步骤: 1、将数据库的文件名:UFDATA_001_2023复制到别的位置留作备用; 2、新建数据库:UFDATA_001_

    2024年02月15日
    浏览(59)
  • 大型数据库期末总复习【SQL server 2008 基础教程】

    Microsoft SQL Server 2008系统由4个主要部分组成。这4个部分被称为4个服务,这些服务分别是 数据库引擎、分析服务、报表服务和集成服务 。这些服务之间相互存在和相互应用,它们的关系示意图如图所示: 1.Microsoft SQL Server 2008系统提供了两种类型的数据库,即系统数据库和用户

    2024年02月06日
    浏览(91)
  • 国家数据局正式揭牌,数据专业融合型人才迎来发展良机【文末送书五本】

    国家数据局正式揭牌,数据专业融合型人才迎来发展良机 🏘️🏘️个人简介:以山河作礼。 🎖️🎖️: Python领域新星创作者,CSDN实力新星认证,阿里云社区专家博主,新星计划导师。 💕💕悲索之人烈焰加身,堕落者不可饶恕。永恒燃烧的羽翼,带我脱离凡间的沉沦。

    2024年02月08日
    浏览(52)
  • 详解爬虫基本知识及入门案列(爬取豆瓣电影《热辣滚烫》的短评 详细讲解代码实现)

    目录 前言什么是爬虫? 爬虫与反爬虫基础知识 一、网页基础知识  二、网络传输协议 HTTP(HyperText Transfer Protocol)和HTTPS(HTTP Secure)请求过程的原理? 三、Session和Cookies Session Cookies Session与Cookies的区别与联系  四、Web服务器Nginx 五、代理IP 1、代理IP的原理 2. 分类 3. 获取途

    2024年04月29日
    浏览(65)
  • SQL Server2008数据库升级至SQL Server2012

    今天接到了一个需求,服务器上的数据库需要从SQL Server2008升级到2012。根据之前的经验,感觉是一个非常有意思的过程(事实上也是。这个过程也给了我一些触动与启发,因此,便记录了自己的踩坑过程以及解决方案,还有安装过程的体会。 启动SQL Server2012的安装引导程序,

    2024年02月05日
    浏览(89)
  • 【文献篇】国家法律法规数据库提供免费的文献下载功能

    不用登录、不用注册、点击即可免费下载word、PDF等版本!!! 比网上随便找、复制粘贴、还需要格式更改、担心完整性、准确性等问题省心N倍!!!—【蘇小沐】 1、国家法律法规数据库 (npc.gov.cn) 国家法律法规数据库由全国人大常委会办公厅建立并维护,目前登载中华人民

    2024年02月01日
    浏览(163)
  • 奇迹MU架设教程:SQL Server 2008数据库的安装教程

    不管是搭建什么游戏,都是有数据库的,奇迹MU用的是SQL 数据库,根据服务器系统选择SQL server版本,我比较喜欢用Windows server 2008R2系统,所以我安装的是SQL server 2008。作为架设奇迹很重要的数据库程序,今天飞飞和你分享SQL Server 2008数据库的安装教程,希望可以帮助到你。

    2024年02月16日
    浏览(53)
  • 第三届OceanBase数据库大赛启动,升级为国家级竞赛

    近日,第三届OceanBase数据库大赛启动报名。本届大赛进一步升级为全国大学生计算机系统能力大赛,由系统能力培养研究专家组发起,全国高等学校计算机教育研究会、系统能力培养研究项目发起高校主办,OceanBase承办,旨在培养和发现计算机底层核心技术的后备人才。 Oc

    2024年02月12日
    浏览(41)
  • vue echarts 3D地球和世界地图的实现,并且显示不同国家的数据

    别忘记给#earth元素设置宽高 效果如下图 别忘记给#world元素设置宽高 其中注意点是world.js 下载地址 下载完成以后需要对其进行改变一下,原本是他是放在一个匿名自执行函数里面,直接在vue里面引用会报错,要把他变成 export 对象,代码片段实例 效果如下图 关键点在globe里面

    2024年02月04日
    浏览(52)
  • 【SQL Server】---SQL Server 2008 R2数据库导入(还原).bak文件

    以下是简述SQL Server把备份的数据.bak文件还原、导入的方法。 一、新建数据库、数据文件夹;         1.新建数据库Cola:打开SQL Server-数据库-新建数据库;                            2.新建.bak数据文件夹:新建一个文件夹,把.bak数据文件放到该文件夹下;      

    2024年02月13日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包