利用python网络爬虫批量下载花瓣中个人主页中收藏的所有图片

import requests
import re
import os
import os.path
#正则表达式,url get分析方法,文件保存,字典保存信息方法
#设置网址url,图片字典
count= 1553
#homeUrl="http://huaban.com/favorite/pets/"

homeUrl="http://huaban.com/xxx/likes/" 

#xxx为你的用户名



images=[]


def get_image_info(url_image):
    htmlPage=requests.get(url = url_image).content        #加载主页面 
    with open("htmlPage.html",'wb') as fp:        #得到网页所有内容
        fp.write(htmlPage)            
    #prog = re.compile(r'app\.page\["pins"\].*')    #p449 正则表达式re模块中compile负责编译,返回regex对象["user"\].["pins"\]
    prog = re.compile(r'\"likes\".*')
    appPins = prog.findall(htmlPage)    #得到正则表达式模式中匹配的所有非重叠结果,返回列表元祖
  
    null=None ;    true=True   #将json中的布尔值转换呈py的None
    print appPins
    if appPins==[]:    #若列表appPins是空,则没有匹配到结果
        print "appPins==None"
    #result = eval(appPins[0][19:-1])    
    result=eval(appPins[0][8:-2])    #p418 eval对表达式(字符串或内建函数compile创建的预编译代码对象),得到所有图的字典
    for i in result:    #遍历result,将有用部分赋值给info
        info={}        #创建字典info
        info['id']=str(i['pin_id'])        #将遍历出的i page信息转换为字符串送入info字典相应的位置
        info['url']="http://img.hb.aicdn.com/" + i["file"]["key"] + "_fw658"
        info['seq']=str(i['seq'])
        if 'image' ==i["file"]["type"][:5]:
            info['type']=i["file"]["type"][6:]
        else:
            info['type']='noName'
        images.append(info)       
if __name__ == '__main__':
    get_image_info(homeUrl)
    page_more=homeUrl + "?iuwq2ekr&max=" + images[-1]['id'] + "&limit=20&wfl=1"    #ajax请求的url  http://huaban.com/favorite/pets/?i5p998kw&max=902435624&limit=20&wfl=1


    for i in range((count-1)/20):      #p29 range设置遍历范围,count为下载数量  
        page_more=homeUrl + "?iuwq2ekr&max=" + images[-1]['seq'] + "&limit=20&wfl=1"
        #page_more="http://huaban.com/ods3oninv0/likes/?iuwqwdvj&max=71926723&limit=20&wfl=1"
        print page_more
        url_more=requests.get(page_more).content        #刷新页面,利用最后一张图的pin id,用network的overview视图查看刷新发出的get信息

        get_image_info(page_more)   
    print "{} image will be download".format(len(images))    #开始下载图片
    for key,image in enumerate(images):    #enumerate返回枚举对象,它既可以循环索引,也可以循环元素
        print "download {0}... ...".format(key)
        try:
            req=requests.get(image["url"])            #用get得到url下的所有资源
        except:
            print "error"
        imagename=os.path.join('likes',image["id"]+"."+image["type"])        #命名文件,位置,文件名+后缀
        with open(imagename,'wb') as fp:        #保存图片
            fp.write(req.content)            #content得到图片的编码写入文件中

            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值