Clause de non-responsabilité: Cet article est uniquement à des fins d'étude et de recherche, et il est interdit de l'utiliser à des fins illégales. Sinon, vous serez à vos propres risques. En cas d'infraction, veuillez le notifier et le supprimer, merci!
Acquisition de données de brevets HowNet
Scène du projet:
Site Web: https://epub.cnki.net/kns/brief/result.aspx?dbprefix=SCPD
Ce que cette fois vous apporte, c'est l'acquisition d'informations sur les brevets HowNet. Il n'y a pas de mesures anti-crawl compliquées. Utilisez simplement la session pour obtenir d'abord le cookie de requête, puis visitez la page de liste avec le cookie.
Code de projet:
Ici pour expliquer, une page contient jusqu'à 50 éléments de données et jusqu'à 120 pages. Par conséquent, si nous voulons obtenir toutes les données, nous devons sélectionner le type de brevet (aussi petit que possible), afin de pouvoir rechercher en fonction de la date et du type de brevet, la plupart des données Peut être obtenu.
Le code de test est le suivant, vous pouvez le modifier vous-même
import requests,re
from lxml import etree
def get_cookie(): # 获取访问的cookie
params = (
('action', ''),
('NaviCode', 'A'), # 筛选的类别
('ua', '1.21'),
('PageName', 'ASP.brief_result_aspx'),
('DbPrefix', 'SCPD'),
('DbCatalog', '\u4E2D\u56FD\u4E13\u5229\u6570\u636E\u5E93'),
('ConfigFile', 'SCPD.xml'),
('db_opt', '\u4E2D\u56FD\u4E13\u5229\u6570\u636E\u5E93'),
('db_value', '\u4E2D\u56FD\u4E13\u5229\u6570\u636E\u5E93'),
('date_gkr_from', '2020-01-24'), # 筛选日期
('date_gkr_to', '2020-01-24'), # 筛选日期
('his', '0'),
('__', 'Fri Oct 16 2020 14:37:38 GMT+0800 (\u4E2D\u56FD\u6807\u51C6\u65F6\u95F4)'),
)
session = requests.session()
session.get('https://epub.cnki.net/kns/request/SearchHandler.ashx', headers=headers, params=params)
return session
def get_list_info(): # 获取列表页
params = (
('curpage', '1'), # 当前页数
('RecordsPerPage', '50'),
('QueryID', '20'),
('ID', ''),
('turnpage', '1'),
('tpagemode', 'L'),
('dbPrefix', 'SCPD'),
('Fields', ''),
('DisplayMode', 'listmode'),
('SortType', "(公开日, 'DATE')desc"),
('PageName', 'ASP.brief_result_aspx'),
)
response = session.get('https://epub.cnki.net/kns/brief/brief.aspx', headers=headers, params=params)
selector = etree.HTML(response.text)
urls_info = re.compile("<a class='fz14' href='/kns/detail/detail.aspx(.*?)'").findall(response.text)
page_info = selector.xpath('//*[@id="J_ORDER"]/tr[2]/td/table/tr/td[2]/div/span[1]')[0].text
nums = len(urls_info)
now_page = int(re.compile('浏览(.*?)/').findall(page_info)[0])
print("当前获取第{}页数据".format(now_page), "数目", nums)
return urls_info
def get_detil():# 获取详情页
for url in urls_info:
# 旧地址访问速度慢,可更换新地址 https://kns.cnki.net/KCMS/detail/detail.aspx 需修改正则匹配
detail_url = 'https://dbpub.cnki.net/grid2008/dbpub/detail.aspx' + url # 详情页地址
print(detail_url)
response = requests.get(url=detail_url, headers=headers)
main_info = ''.join(etree.HTML(response.text).xpath('//*[@id="box"]//text()')).replace('\r\n', '').replace(' ','').replace(' ', '')
# print(main_info)
title = re.compile('font-weight:bold;text-align:center;">(.*?)</td>').findall(response.text)[0]
gb_id = re.compile('【公开号】(.*?)【').findall(main_info)[0]
gb_time = re.compile('【公开日】(.*?)【').findall(main_info)[0]
sq_id = re.compile('【申请号】(.*?)【').findall(main_info)[0]
sq_time = re.compile('【申请日】(.*?)【').findall(main_info)[0]
sq_person = re.compile('【申请人】(.*?)【').findall(main_info)[0]
addr = re.compile('【地址】(.*?)【').findall(main_info)[0]
fmr = '#'.join(re.compile('【发明人】(.*?)【').findall(main_info)[0].split(';'))
int_cl = re.compile('【专利分类号】(.*?)推荐下载').findall(main_info)[0]
try:
patent_agency = re.compile('【专利代理机构】(.*?)【').findall(main_info)[0]
agent = '#'.join(re.compile('【代理人】(.*?)【').findall(main_info)[0].split(';'))
except Exception:
patent_agency = agent = ''
abstract = re.compile('【摘要】(.*?)【').findall(main_info)[0].replace("'", '"')
print(title, gb_id, gb_time, sq_id, sq_time, sq_person, addr, fmr, int_cl, patent_agency, agent, abstract)
# break
if __name__ == '__main__':
headers = {
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36',
'Referer': 'https://epub.cnki.net/kns/brief/result.aspx?dbprefix=SCPD',
}
session = get_cookie()
urls_info = get_list_info()
get_detil()
Conclusion:
Remarque: les types de subdivision des blogueurs sont indiqués ci-dessous
#分类id
navicode_list = ['A001,A002,A003,A004,A005,A006,A007','A008,A009,A010,A011,A012,A013',
'F,G,H,J',
'B014_1,B014_2','B014_31,B014_32,B014_33,B014_34,B014_35,B014_36,B014_37','B014_38,B014_39,B014_3A','B014_4','B014_5,B014_6,B014_7,B014_8',
'B015_1,B015_3,B015_4,B015_5,B015_6,B015_7,B015_8','B015_2','B016_11','B016_12',
'B016_3,B016_5,B016_6,B016_7,B016_8','B016_4',
'B016_21,B016_22,B016_23,B016_24,B016_26,B016_27,B016_28,B016_29','B016_25','B017,B018,B019',
'B020_1','B020_2,B020_3,B020_4,B020_5,B020_6,B020_7,B020_8,B020_9,B020_A,B020_B,B020_C',
'B021,B023,B025','B022_1,B022_2,B022_3,B022_4,B022_5','B022_6,B022_7','B022_8,B022_B,B022_C','B022_9','B022_A',
'B024_3','B024_7','B024_1,B024_2,B024_4,B024_5,B024_6','B024_A','B024_B,B024_E','B024_C','B024_D','B024_8,B024_9',
'B026','B027_1,B027_2,B027_3,B027_4','B027_5,B027_6',
'C028_1,C028_2,C028_4,C028_5,C028_6,C028_7,C028_8','C028_9','C028_38','C028_31,C028_32,C028_33,C028_34,C028_35',
'C028_36,C028_37,C028_39,C028_3A,C028_3B,C028_3C','C029_1,C029_2,C029_3,C029_4,C029_6,C029_7',
'C029_8,C029_9,C029_B,C029_C,C029_D','C029_51,C029_52,C029_53,C029_54,C029_55',
'C029_56,C029_57,C029_58,C029_59','C029_A1,C029_A3','C029_A2','C030_1,C030_2,C030_3,C030_4,C030_5','C030_6,C030_7,C030_8,C030_9,C030_A',
'C030_B,C030_C,C030_D,C030_E,C030_F,C030_G,C030_H,C030_I','C031,C032,C033,C034','C035_1,C035_2,C035_3,C035_4,C035_5,C035_6,C035_7,C035_8',
'C035_9,C035_A,C035_B,C035_C,C035_D,C035_E','C036,C037,C040,C041','C038_1,C038_21,C038_22,C038_23,C038_24,C038_3',
'C038_25,C038_26,C038_27,C038_28,C038_29','C039','C042',
'D043,D044,D045,D046,D047','D044,D045,D046,D047',
'I135_1,I135_2,I135_3,I135_4,I135_7,I135_8','I135_6','I135_522,I135_523,I135_524','I135_521',
'I138_1,I138_2,I138_3,I138_4,I138_5,I138_6,I138_7,I138_8,I138_9,I138_A,I138_B','I138_C12,I138_C13,I138_C14,I138_C2','I138_C11',
'I136_87,I136_88','I136_84,I136_85,I136_86','I136_81,I136_82,I136_83',
'I137_3,I137_4,I137_5','I137_1,I137_2','I139,I140,I141,I142,I143,I144',
'I136_1,I136_2,I136_3,I136_4,I136_5,I136_6,I136_7','I136_9,I136_A,I136_B,I136_C,I136_D,I136_E,I136_F,I136_G']