环境:python3.5
今天拿抓取花瓣网上的美女图片来练练手
抓取图片,主要是要知道图片资源的url,知道了url后,就可以使用urllib.request.urlretrieve( )方法保存到本地了。
下面就直接贴代码吧,代码中有详细注释。
#coding:utf-8 ''' Created on 2016年8月16 @author: FangLiang ''' import urllib.request import re #### 获取网页源码 def getHtml(url): page = urllib.request.urlopen(url) html = page.read().decode('utf-8') #需要解码 return html #### 下载图片 def getImage(html): #### 获取HTML源码里面的app.page["pins"]部分,主要图片ID位于此部分 app_page_pins_re = re.compile(r'app.page\\["pins"\\](.*?);',re.S) app_page_pins_str = re.findall(app_page_pins_re,html)[0] pin_id = r'"pin_id":(\d+)' pin_id_re = re.compile(pin_id) #### 获取图片ID,保存在列表中 pin_id_list = re.findall(pin_id_re,app_page_pins_str) x = 0 for pinid in pin_id_list: #### 获取跳转网页网址 url_str = r'http://huaban.com/pins/%s/' % pinid #### 获取点击图片时弹出网页的源码 pin_id_source = getHtml(url_str) #### 解析源码,获取原图片的网址 img_url_re = re.compile('main-image.*?src="(.*?)"',re.S) img_url_list = re.findall(img_url_re,pin_id_source) try: img_url = 'http:' + img_url_list[0] #### 获取原图片的网址,以_fw658结尾的链接并不是原图片的链接,需要把_fw658去掉 if '_fw658' in img_url: img_url = img_url[:-6] urllib.request.urlretrieve(img_url, '%s.jpg' % x) except: print("获取图片:%s失败,跳过,获取下一张。" % img_url) continue print("获取:%s成功!" % img_url) x += 1 print("图片保存成功!") if __name__ == '__main__': html = getHtml("http://huaban.com/favorite/beauty/") getImage(html)
输出:
获取:http://hbimg.b0.upaiyun.com/0a98b002ed3143f38d47d7b08cef3acd8c1e243c2b7d6f-liLblQ成功! 获取:http://hbimg.b0.upaiyun.com/165c232e1b0bef7a30559d979812635d3607a8aa113a48-UgQYrz成功! 获取:http://hbimg.b0.upaiyun.com/2b4a780a1e82b3f6d0c46de0556f128b300a5a5a21928-y2iZlC成功! 获取:http://hbimg.b0.upaiyun.com/b53449e1d1094d9179800de2ba61a3ad1f3a8d28cc03-IrJfvX成功! 获取:http://hbimg.b0.upaiyun.com/46a4175fe21a0cda3c88d499967acfb21b4fc92072fd5-HaPgcJ成功! 获取:http://hbimg.b0.upaiyun.com/b69cd0a013cf8df6d2b99f4ccc5dc4fea6def3879a2b-xt4fbL成功! 获取:http://hbimg.b0.upaiyun.com/e429f0fd656b0d7ea6a45aa36c5500c0d6a003a41d741-cC2aPc成功! ...... 图片保存成功!
脚本所在目录就会出现很多图片
