爬虫python解析json与python下载图片

目标:http://yun.kujiale.com/api/openfps?query=beijing&start=1&num=50 中的所有户型数据,将其户型图片下载到本地.

目标中的数据以json形式存在,因此使用json.loads.

全部代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#coding=utf-8
#encoding=utf-8
import re
import requests
import json
import urllib
def valifile(name):
rstr = r"[/\:*?"<>|]" # ';/:*?"<>|';
valiname = re.sub(rstr, "", name)
return valiname

def getkjlimages():
for i in range(0,1000000):
print(i)
i = str(i*6)
surl = ';http://yun.kujiale.com/api/openfps?query=beijing&amp;start=';+i+';&amp;num=6';
ret=requests.get(url=surl)
ret.encoding=';utf-8';
kjl = json.loads(ret.text)
for j in range(0,49):
itmes = kjl[';obsExFps';][j]
name = json.dumps(itmes[';name';])[1:-1].decode("unicode-escape")
src = json.dumps(itmes[';pics';])[1:-1]
##name和src后面加了[1:-1]的原因是json数据中包含了前后两个引号,要将其去掉
print(';img_src=';+json.dumps(itmes[';pics';]))
img = urllib.urlopen(src).read()
f = file(';imgs/';+validateTitle(name)+';.jpg';,"wb")
f.write(img)
f.close
getkjlimages()

其中,json.dumps出来的字符串为 uxxxx形式,需要用decode("unicode-escape")进行转换成中文.另外,由于爬下来的name要直接用于文件名,其中有""等符号,因此需要将name合法化.

1
2
3
4
def valifile(name):
rstr = r"[/\:*?"<>|]" # ';/:*?"<>|';
valiname = re.sub(rstr, "", name)
return valiname

通过以上valifile可以将文件名在windows下合法化.

运行结果:

upload successful