程序员

python一键追星,爬取个人微博主页下的图片

2019-07-07  本文已影响19人  小霸王_e024

一键追星,爬取个人微博主页下的图片

追星族,喜爱明星微博下发的个人照片,一个一个图片下载觉得麻烦,

python爬虫教你一键爬取个人微博主页下的图片

爬取网站:https://m.weibo.cn,此处为手机版的微博网址

image

搜索自己喜欢的个人微博主页(用户):

此处选择第一个(并且进入其个人主页)

image image

我们的目标(爬取onIyU-IU中国首站)主页下发布的所有图片

按F12此处用的百度浏览器,刷新并且选择XHr,

image

以看见有三个getindex?uid=.....

这里三个文件便是我们爬取的需要的信息所在

点击第二个后我们可以看见如下的内容

image

分析可以知道:

而且cardlistinfo里面的total为发的微博信息总数

并且能看到一个为since_id(记录下来,后面爬取需要)

cards 为微博信息 点击并且能看到如下信息

image

Large下的URL便是图片的URL,python爬取图片便是这个URL

拉动滑条刷新新的内容

出现了一条新的getindex?uid=.....,点击查看

再点击Headers查看需要提交的信息

image

经过研究可知道不同的微博主页下,变化的数据有

Uid , since_id

准备完毕后开始爬取(图片下载我们使用多进程池)


1.导入需要的库

    import requests
    import time
    from urllib.parse import urlencode
    from multiprocessing import Pool

2. get函数 #为得到图片的URL地址

def a(since_id='',uid=0,):

    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 BIDUBrowser/8.7 Safari/537.36',
        'x-requested-with': 'XMLHttpRequest',
        'referer': 'https://m.weibo.cn'
    }
    params={
        'uid':uid,
        'luicode':10000011,
        'lfid':'231093_-_selffollowed',
        'type':int(uid),
        'value':5743555203,
        'containerid':'107603'+str(uid),
        'since_id':since_id
    }
    lv=[]
    url='https://m.weibo.cn/api/container/getIndex?'+urlencode(params)
    req=requests.get(url,headers=headers)
    req=req.json()  #since_id
    since_id=req.get('data').get('cardlistInfo').get('since_id')
    imgs=req.get('data').get('cards')
    for i in imgs:
        try:
            i=i.get('mblog').get('pics')
            for v in i :
                v=v.get('large').get('url')
                lv.append(v)
        except:
            continue
    time.sleep(0.5)
    return lv,since_id

3.编写down函数 下载图片

def down(isd='',lio=''):
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 BIDUBrowser/8.7 Safari/537.36',
        'x-requested-with': 'XMLHttpRequest',
        'referer': 'https://m.weibo.cn',

    }
    re = requests.get(isd, headers=headers, )
    print(re)
    name = str(lio) + '.jpg'
    with open(name, 'wb')as f:
        f.write(re.content)
    print('-' * 10)
    time.sleep(0.5)

4. 主函数的编写

if __name__ == '__main__':
    lvvv=[]
    t=0
    sw=0
    u = eval(input('输入uid:'))
    p = eval(input('输入页数/10:'))
    try:
        s = a(since_id='', uid=u)
        lvvv.extend(s[0])
        for o in range(p):
            sw+=1
            s = a(since_id=s[1], uid=u)
            lvvv.extend(s[0])
            print(sw)
    except:pass

    pool=Pool(processes=4)
    for i in range(len(lvvv)):
        pool.apply_async(down,(lvvv[i],i))
    print('star~ star~ star~')
    pool.close()
pool.join()

函数就这样编写完成了

运行后,在该程序文件下看见图片

image

啊!!!

女神图片就这样一键下载下来了

上一篇下一篇

猜你喜欢

热点阅读