Python爬虫 | 佰腾网2008-2018年各省不同类型专利数据

(25) 2024-04-05 23:01:01

Python爬虫 | 佰腾网2008-2018年各省不同类型专利数据

  • 目的及数据来源
  • 模拟登录
  • 模仿filter请求并进行数据解析
  • 结果示例
  • 总结

目的及数据来源

  1. 目的:获取2008-2018年各省外观专利、发明专利、实用新型专利、发明授权专利、发明公开专利的数量。
  2. 数据来源:佰腾网 https://www.baiten.cn/gjs.html

模拟登录

打开佰腾网,注册及登录之后就可以进行检索。

以公开(公告)日为2018年,申请人地址在广东为例,在检索框中的公开(公告)日输入2018,申请人地址输入广东,进行检索,得到2018年广东省不同类型专利数量;
Python爬虫 | 佰腾网2008-2018年各省不同类型专利数据 (https://mushiming.com/)  第1张

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep


# 创建列表存储所有省份,不包括港澳台
provinces = [
    '上海', '云南', '内蒙古', '北京', '吉林', '四川', '天津', '宁夏', '安徽', '山东', '山西', '广东',
    '广西', '新疆', '江苏', '江西', '河北', '河南', '浙江', '海南', '湖北', '湖南', '甘肃', '福建',
    '西藏', '贵州', '辽宁', '重庆', '陕西', '青海', '黑龙江'
]

# 年份为2008-2018年
years = range(2008, 2019)

options = webdriver.ChromeOptions()  #自定义加载项,如限制图片加载,不打开浏览器窗口等操作
browser = webdriver.Chrome(service=s, options=options)
url = 'https://www.baiten.cn/gjs.html'
pwd = browser.get(url)
pwd_1 = browser.find_element_by_class_name(
    'person-head').click()  #通过name属性定位输入框
pwd_2 = browser.find_element_by_name('login_mobile')
pwd_2.click()
pwd_2.send_keys('1599***0488')  #手机号
pwd_3 = browser.find_element_by_name('login_pwd')
pwd_3.click()
pwd_3.send_keys('**********')  #密码
pwd_3.send_keys(Keys.ENTER)

模仿filter请求并进行数据解析

打开开发者工具(F12),点击Network选项并且选择XHR,找到名为filter的请求(需要的数据就存在其返回的Json中),模仿filter请求,获得佰腾网2008-2018年各省不同类型专利数量。

根据开发者工具中filter请求,组装请求头:
Python爬虫 | 佰腾网2008-2018年各省不同类型专利数据 (https://mushiming.com/)  第2张

import requests
import pandas as pd
import os
import re


header = { 
   
    'Accept':'*/*',
    'Accept-Encoding':'gzip, deflate, br',
    'Accept-Language':'zh-CN,zh;q=0.9',
    'Connection':'keep-alive',
    'Content-Length':'90',
    'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
    'Cookie':'JSESSIONID=5685C9F9BB40B88004576169DCD75662; Hm_lvt_7fc44f078bf7b5e19489428c362109a3=1640334004; UM_distinctid=17deb868eaa13-016d269bbd79eb-4303066-144000-17deb868eab52; CNZZDATA1275904268=682609430-1640324966-%7C1640324966; BSESSION=7fa1f194c406c5183527785238ae66a4e141d3cf2c7980b2; PD=c9b487caa8a7a02b42526734e17becc1ed556f60c8dc13c588be38f6f70444637a065d085a54d1f8; Hm_lpvt_7fc44f078bf7b5e19489428c362109a3=1640335261; yunsuo_session_verify=ee778c7d15a8968d2392213560d47d7b',
    'Host':'www.baiten.cn',
    'Origin':'https://www.baiten.cn',
    'Referer':'https://www.baiten.cn/results/s/aa%253A%2528%25E5%25B9%25BF%25E4%25B8%259C%2529%2BAND%2B%2528pd%253A%255B20180101%2BTO%2B20181231%255D%2529/.html?type=s&sc=15',
    'sec-ch-ua':'" Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96"',
    'sec-ch-ua-mobile':'?0',
    'sec-ch-ua-platform':'"Windows"',
    'Sec-Fetch-Dest':'empty',
    'Sec-Fetch-Mode':'cors',
    'Sec-Fetch-Site':'same-origin',
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
}

for i in range(len(years)):
    for j in range(len(provinces)):
        p = { 
   
            'q':
            'aa:(' + str(provinces[j]) + ') AND (pd:[' + str(years[i]) +
            '0101 TO ' + str(years[i]) + '1231])',
            'fq':
            '',
            'sc':
            '35184372088831',
            'pageSize':
            ''
        }
        re_1 = requests.post('https://www.baiten.cn/results/filter',
                             headers=header,
                             data=p).text
        pattern = r'[0-9.]+'
        regex = re.compile(pattern)
        result = regex.findall(re_1)
        index = ['实用新型专利', '发明专利', '外观专利', '发明授权专利', '发明公开专利']
        column = ['数量']
        path = 'D:\\YXH\\PythonLearning\\Python数据分析\\实验一\\佰腾网专利数据\\' + str(
            years[i])
        isExists = os.path.exists(path)
        if not isExists:
            os.mkdir(path)
        pd.DataFrame(result[:5], index=index, columns=column).to_excel(
            r'D:\\YXH\\PythonLearning\\Python数据分析\\实验一\\佰腾网专利数据\\' +
            str(years[i]) + '/' + str(provinces[j]) + '.xlsx')
            

结果示例

  1. 佰腾网2008-2018年专利数据
    Python爬虫 | 佰腾网2008-2018年各省不同类型专利数据 (https://mushiming.com/)  第3张

  2. 佰腾网2018年各省专利数据
    Python爬虫 | 佰腾网2008-2018年各省不同类型专利数据 (https://mushiming.com/)  第4张

  3. 佰腾网2018年广东省不同类型专利数据
    Python爬虫 | 佰腾网2008-2018年各省不同类型专利数据 (https://mushiming.com/)  第5张

总结

本文调用了selenium实现佰腾网的模拟登录,然后调用requests、re、pandas、os库实现佰腾网2008-2018年各省不同类型专利数据的爬取和本地化存储。

THE END

发表回复