红点奖,源自德国。是与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()