1. 程式人生 > >python抓取bing主頁背景圖片

python抓取bing主頁背景圖片

replace utf bytes for json格式 module imp urlopen 有變

最初Python2寫法: #!/usr/bin/env python

# -*- coding:utf-8 -*-

# -*- author:nancy -*-

# python2抓取bing主頁所有背景圖片

import urllib,re,sys,os

def get_bing_backphoto():

if (os.path.exists(‘photos‘)== False):

os.mkdir(‘photos‘)

for i in range(0,1000):

url = ‘http://cn.bing.com/HPImageArchive.aspx?format=js&idx=‘+

str(i)

+‘&n=1&nc=1361089515117&FORM=HYLH1‘

html = urllib.urlopen(url).read()

if html == ‘null‘:

print ‘open & read bing error!‘

sys.exit(-1)

reg = re.compile(‘"url":"(.*?)","urlbase"‘,re.S)

text = re.findall(reg,

html)

#http://s.cn.bing.net/az/hprichbg/rb/LongJi_ZH-CN8658435963_1366x768.jpg

for imgurl in text:

right = imgurl.rindex(‘/‘)

name = imgurl.replace(imgurl[:right+1],‘‘)

savepath = ‘photos/‘+ name

urllib.urlretrieve(imgurl, savepath)

print

name + ‘ save success!‘

get_bing_backphoto()

Python3與Python2的錯誤調整: TypeError: can‘t use a string pattern on a bytes-like object 原因為Python3 findall數據類型用bytes類型,因此在正則表達式前應添加html = html.decode(‘utf-8‘)。 “AttributeError: ‘module‘ object has no attribute ‘urlopen‘” 原因是Python3裏的urllib模塊已經發生改變,此處的urllib都應該改成urllib.request。 由於bing圖片對外接口的圖片json格式變了,python第三方庫的導入格式有變化,因此代碼調整如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# -*- author:nancy-*-

# python3抓取bing主頁所有背景圖片

import urllib.request,re,sys,os

def get_bing_backphoto():

if (os.path.exists(‘photos‘)== False):

os.mkdir(‘photos‘)

for i in range(0,10):

url = http://cn.bing.com/HPImageArchive.aspx?format=js&idx=+str(i)+‘&n=1&nc=1361089515117&FORM=HYLH1‘

html = urllib.request.urlopen(url).read()

if html == ‘null‘:

print( ‘open & read bing error!‘)

sys.exit(-1)

html = html.decode(‘utf-8‘)

html = html.replace(‘/az/‘,http://s.cn.bing.net/az/)

reg = re.compile(‘"url":"(.*?)","urlbase"‘,re.S)

text = re.findall(reg,html)

for imgurl in text :

right = imgurl.rindex(‘/‘)

print(imgurl)

name = imgurl.replace(imgurl[:right+1],‘‘)

savepath = ‘photos/‘+ name

urllib.request.urlretrieve(imgurl, savepath)

print (name + ‘ save success!‘)

get_bing_backphoto()

python抓取bing主頁背景圖片