【Python爬蟲】爬取企業專利信息

本來是個美好的週末的,但是週五晚上領導給了一個公司名稱的Excel,讓把這些公司的專利信息爬取下來。本文記錄了爬取企業專利信息的心酸過程。碼字不易,喜歡請點贊!!!
在這裏插入圖片描述

一、找尋目標網頁

在接到這個任務之後,我的內心是拒絕的。但是又不能不幹。因此首先我需要先找到有公司專利信息的地方。在一番查找和問了問朋友之後,我知道中國專利網國家知識產權網Incopat天眼查企查查這些網站上面都有企業的專利信息。

  1. 中國專利網國家知識產權局
    首先我看了下這兩個網站,國家知識產權網頁面如下,網頁可以根據公司名稱來搜索專利,並且還有個好處就是可以使用關鍵字OROR連接公司名稱,從而一次查詢多個公司的專利信息。
    在這裏插入圖片描述
    但是我還是放棄了這兩個網址,是因爲加載速度比較慢,如下圖,點擊查詢或者下一頁速度很慢(可能是我這邊網速或者啥別的原因)。大家可以先試一下自己那邊加載這個網址的速度,如果速度還行的話,建議直接在這個網頁上爬取。
    在這裏插入圖片描述

2.Incopat
Incopat網頁如下,這個網頁的話需要登錄才能使用,當然你也可以申請試用,申請之後工作人員會聯繫,也比較慢。但是會有學校買過了這些數據庫,比如17年大連理工買了這個數據庫,當時我需要數據時候直接讓大工的朋友幫忙下載的,速度很快,而且可以直接導出。
在這裏插入圖片描述
所以大家可以看看有沒有哪些高校或者機構買了這個數據庫,然後找一下在裏面的朋友幫忙下載,速度非常快,操作十分簡單。

3.天眼查企查查
我找了一下,沒找到買了Incopat的數據庫的朋友。所以只好自己爬了,因爲之前爬過天眼查的很多數據,所以首先看了 天眼查。
【Python爬蟲】模擬登陸天眼查網站
【Python】爬取天眼查公司電話以及地址信息
在這裏插入圖片描述
其實18年年初爬過天眼查專利信息,但是因爲電腦壞了,忘記備份代碼了,所以沒了,很扎心!!!然後這次首先看了下天眼查專利這部分的爬蟲,發現反爬做的太好了。所以選擇了反差比他差一點點的企查查,企查查專利頁面如下。
在這裏插入圖片描述

二、開始爬蟲

1. 獲取公司的ID
天眼查和企查查的整個網頁結構是一樣的,一般根據公司名稱爬取企業信息,都是先獲取公司的ID,然後根據公司ID進入到包含企業各項指標信息的頁面。這裏以華爲公司爲例,上面標籤a的href屬性值中KaTeX parse error: Expected group after '_' at position 6: /frim_̲後的一串字母數字組合就是這個公司的ID。
在這裏插入圖片描述
2.進入公司信息主頁面
然後根據剛剛得到的公司ID(保存這個ID,後面爬取企業專利信息還需要)可以進入包含華爲的內容的主頁面,可以看到網址由公司ID加其他固定信息組成。
在這裏插入圖片描述

3.找到專利信息部分
專利信息在知識產權裏面有,點擊知識產權裏面的專利信息可以跳到專利信息部分。
在這裏插入圖片描述

專利信息如下,到這裏你會發現當一個公司的專利信息大於5000條時,只能顯示最新的5000條數據。不過也沒什麼大關係,畢竟大部分公司的專利信息都達不到這個數據量。
在這裏插入圖片描述
然後這裏的話是動態js加載的,所以需要進入network找到頁面的真是網址,來進行抓包。
在這裏插入圖片描述
進去之後看到Response裏面正好是我們要的信息。

4. 分析如何取出專利信息
然後看看Headers裏面的信息,如下圖,是一個Get類型請求,可以看出unique的內容就是公司的ID,而companyname後面的一串就是公司名稱,p後面的數值是第幾頁的專利信息。
在這裏插入圖片描述
主要參數也可以直接看下面Query String Parameters部分,更加清楚。
在這裏插入圖片描述

知道專利數據的請求網址之後,以前是可以直接打開,然後輕鬆的爬取的,現在直接打開會顯示以下頁面,報錯顯示Error 405
在這裏插入圖片描述
因此還是需要老老實實的根據構建請求頭,下面就是這個頁面的請求頭信息。
在這裏插入圖片描述
請求頭裏面除了cookie在你的登錄信息過時了,或者被企查查要求手動檢查時會更新,其他時候不會變。因此可以直接使用這些信息來抓取頁面內容。

5.爬蟲代碼
這裏按照上面的兩個步驟進行的:爬蟲公司ID,根據ID和公司名稱爬取公司專利信息。

  • 爬取所有公司ID信息
#讀取公司名稱
path = r"C:\公司名稱.xlsx"
df = pd.read_excel(path)
df = df['Conme']

ids = [] #用來儲存公司ID
for key in df[0:]:
    print(key)#公司名稱
    url = 'https://www.qichacha.com/search?key='+key
    id = get_id(url)#獲取公司ID函數
    id = id.split('firm_')[1].split('.html')[0]
    ids.append(id)
    time.sleep(0.44+random.random())#適當控制爬取速度,防止被封
  
#將爬取的公司ID存到文檔  
ids = pd.DataFrame(ids)
dfid = pd.read_excel(r"C:\companyID.xlsx")
dfid = pd.concat([dfid,ids])
dfid.to_excel(r"C:\companyID.xlsx",index=0)
  • 爬取公司專利信息
data = pd.read_excel(r"C:\companyID.xlsx")#讀取公司ID
messages = []#存儲公司專利信息
for i in range(0,data.shape[0]):#data.shape[0]
    company = data.loc[i,'company']
    id = data.loc[i,'companyID']
    for j in range(1,501):#最多500頁專利信息
        url = 'https://www.qichacha.com/company_getinfos?unique='+id + '&companyname=' + company +'&p='+ str(j) + '&tab=assets&box=zhuanli&zlpublicationyear=&zlipclist=&zlkindcode=&zllegalstatus='
        try:
            message = get_message(company,id,url)#獲取專利信息函數
        except AttributeError:
            break
        messages.append(message)
        if(len(message[0])<10 or j==500):
            break
        time.sleep(0.24+random.random())
    time.sleep(0.56+random.random())

#存儲爬取的專利信息
dfMess = pd.read_excel(r"C:\message.xlsx")
print(dfMess.shape)
for i in range(len(messages)):
    m = messages[i]
    me = pd.DataFrame(data = {'company':m[0],
                      'xuhao':m[1],
                      'type':m[2],
                      'number':m[3],
                      'date':m[4],
                      'name':m[5]})
    dfMess = pd.concat([dfMess,me])
print(dfMess.shape)
dfMess.to_excel(r"C:\message.xlsx",index=0)

歡迎添加個人微信號:liu2536036458。
想進入交流羣的,備註:數據分析交流羣
我們共同學習,共同進步!!!


參考文獻:
https://blog.csdn.net/Asher117/article/details/82804506
https://blog.csdn.net/Asher117/article/details/90348758

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章