Python json数据爬取处理,红点官网大奖设计作品爬取
时间:2022-07-22
本文章向大家介绍Python json数据爬取处理,红点官网大奖设计作品爬取,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
红点奖,源自德国。是与IF设计奖齐名的一个工业设计大奖,是世界上知名设计竞赛中最大最有影响的竞赛。红点奖与德国“IF奖”、美国“IDEA奖”一起并称为世界三大设计奖,想要知晓好设计,红点大奖设计不容错过!
官网:
https://www.red-dot.org/zh/search?q&p=0&a=&c=&y=2019&sort=relevance%20desc&f=product-design&tab=1
通过抓包可以发现,数据是通过json来获取!
get params参数:
我们来用python来实现:
分页初始设置为100,当获取不到我们想要的json数据时跳出循环!
#获取json数据
def get_datas(category):
path=f'Red Dot Design Award/{category}'
os.makedirs(path, exist_ok=True) #创建目录
for i in range(100):
print(f'正在采集第{i+1}页...')
params={
'rows': '2',
'start': f'{i}',
'eID': 'tx_solr_proxy',
'L': '2',
'id': '1',
'grouping': '0',
#'fq': '(altType_stringS:"Product Design") AND year_intS:"2019"',
'fq':f'(altType_stringS:"Product Design") AND year_intS: "2019" AND awardCategory_stringM:"{category}"',
'sort': 'relevance desc',
}
url="https://www.red-dot.org/index.php?"
response=requests.get(url,params=params)
time.sleep(2)
req = json.loads(response.content)
print(req)
docs = req['response']['docs']
if len(docs) <1:
break
print(len(docs))
print(docs)
get_content(path, docs)
解析json数据,获取内容:
#获取内容
def get_content(path,docs):
for doc in docs:
h1=doc['title'] #标题
h1 = re.sub(r'[|/<>:*?\"]', "_", h1) # 剔除不合法字符
img_name=f'{h1}.jpg'
description=doc['description'] #描述
remark=doc['juryStatement_stringS'] #评审团评语
remark='评审团评语%s%s'%('n',remark)
img_url=doc['overviewImage_stringS']['large'] #大图
get_img(img_name, img_url, path)
texts = '%s%s%s%s%s' % (h1, 'n', description, 'n', remark)
print(texts)
get_texts(h1, texts, path)
图片下载:
#下载图片
def get_img(img_name,img_url,path):
r=requests.get(img_url)
print(f"开始下载 {img_name}图片 ...")
with open(f'{path}/{img_name}','wb') as f:
f.write(r.content)
print(f">>>下载 {img_name}图片 成功!")
保存文本内容:
#保存文本内容
def get_texts(h1,texts,path):
print(f"开始保存 {h1}.txt ...")
with open(f'{path}/{h1}.txt','w',encoding='utf-8') as f:
f.write(texts)
print(f">>>保存 {h1}.txt 成功!")
主函数:
由于分类比较多,而且数据不好抓取,我们手动构建列表!
同时写了下错误代码!
def mian():
categorys=["Audio","Automobile und Motorräder","Baby und Kind","Bad und Sanitär","Badarmaturen und Duschköpfe","Boote",
"Brillen","Bürobedarf und Schreibwaren","Büromöbel und Bürostühle","Computer- und Informationstechnik",
"Fahrräder und Fahrradzubehör","Fahrzeugzubehör","Gartengeräte und Gartenzubehör","Gartenmöbel",
"Gartenwerkzeuge","Haushaltsgeräte und Haushaltszubehör","Healthcare","Heiz- und Klimatechnik","Hobby und Freizeit",
"Industriegeräte","Innenarchitektur und Interior Design","Interior-Design-Elemente","Kameras und Kamerazubehör",
"Kochgeschirr und Kochutensilien","Koffer und Taschen","Kommunikationstechnik","Küchen und Küchenmöbel",
"Küchenarmaturen und Spülen","Küchengeräte und Küchenzubehör","Licht und Leuchten","Maschinen und Automation",
"Materialien und Oberflächen","Medizinische Geräte und Medizintechnik","Mobiltelefone","Mode und Lifestyle-Accessoires",
"Nutzfahrzeuge","Outdoor- und Camping-Equipment","Personal Care",
]
for category in categorys:
print(category)
try:
get_datas(category)
except Exception as e:
print(f"获取数据失败了,错误代码:{e}")
运行效果:
爬取效果:
附完整代码:
#红点奖作品采集
#20191212 by 微信:huguo00289
# -*- coding: utf-8 -*-
import requests
import re,time,os
import json
#获取json数据
def get_datas(category):
path=f'Red Dot Design Award/{category}'
os.makedirs(path, exist_ok=True) #创建目录
for i in range(100):
print(f'正在采集第{i+1}页...')
params={
'rows': '2',
'start': f'{i}',
'eID': 'tx_solr_proxy',
'L': '2',
'id': '1',
'grouping': '0',
#'fq': '(altType_stringS:"Product Design") AND year_intS:"2019"',
'fq':f'(altType_stringS:"Product Design") AND year_intS: "2019" AND awardCategory_stringM:"{category}"',
'sort': 'relevance desc',
}
url="https://www.red-dot.org/index.php?"
response=requests.get(url,params=params)
time.sleep(2)
req = json.loads(response.content)
print(req)
docs = req['response']['docs']
if len(docs) <1:
break
print(len(docs))
print(docs)
get_content(path, docs)
#获取内容
def get_content(path,docs):
for doc in docs:
h1=doc['title'] #标题
h1 = re.sub(r'[|/<>:*?\"]', "_", h1) # 剔除不合法字符
img_name=f'{h1}.jpg'
description=doc['description'] #描述
remark=doc['juryStatement_stringS'] #评审团评语
remark='评审团评语%s%s'%('n',remark)
img_url=doc['overviewImage_stringS']['large'] #大图
get_img(img_name, img_url, path)
texts = '%s%s%s%s%s' % (h1, 'n', description, 'n', remark)
print(texts)
get_texts(h1, texts, path)
#下载图片
def get_img(img_name,img_url,path):
r=requests.get(img_url)
print(f"开始下载 {img_name}图片 ...")
with open(f'{path}/{img_name}','wb') as f:
f.write(r.content)
print(f">>>下载 {img_name}图片 成功!")
#保存文本内容
def get_texts(h1,texts,path):
print(f"开始保存 {h1}.txt ...")
with open(f'{path}/{h1}.txt','w',encoding='utf-8') as f:
f.write(texts)
print(f">>>保存 {h1}.txt 成功!")
def mian():
categorys=["Audio","Automobile und Motorräder","Baby und Kind","Bad und Sanitär","Badarmaturen und Duschköpfe","Boote",
"Brillen","Bürobedarf und Schreibwaren","Büromöbel und Bürostühle","Computer- und Informationstechnik",
"Fahrräder und Fahrradzubehör","Fahrzeugzubehör","Gartengeräte und Gartenzubehör","Gartenmöbel",
"Gartenwerkzeuge","Haushaltsgeräte und Haushaltszubehör","Healthcare","Heiz- und Klimatechnik","Hobby und Freizeit",
"Industriegeräte","Innenarchitektur und Interior Design","Interior-Design-Elemente","Kameras und Kamerazubehör",
"Kochgeschirr und Kochutensilien","Koffer und Taschen","Kommunikationstechnik","Küchen und Küchenmöbel",
"Küchenarmaturen und Spülen","Küchengeräte und Küchenzubehör","Licht und Leuchten","Maschinen und Automation",
"Materialien und Oberflächen","Medizinische Geräte und Medizintechnik","Mobiltelefone","Mode und Lifestyle-Accessoires",
"Nutzfahrzeuge","Outdoor- und Camping-Equipment","Personal Care",
]
for category in categorys:
print(category)
try:
get_datas(category)
except Exception as e:
print(f"获取数据失败了,错误代码:{e}")
if __name__=='__main__':
mian()
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Oracle参数解析(nls_numeric_characters)
- 在Linux系统中安装Tomcat
- java_缓冲流、转换流、序列化流
- Kali内网使用正向shell入侵
- KALI拿到shell后提权操作
- KALI 内网渗透记录
- CentOS7部署Grafana
- CentOS7网卡配置文件详解
- 基于docker搭建jenkins
- [周末往期回顾]Oracle Data Guard 参数介绍
- 程序员必备CDN加速jsDelivr+Gihub远程仓库
- java_方法的定义、调用、重载
- Oracle参数解析(nls_calendar)
- java_List、Set、Conllections工具类
- Oracle参数解析(OPEN_CURSORS)