美文网首页程序员
python一键追星,爬取个人微博主页下的图片

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

作者: 小霸王_e024 | 来源:发表于2019-07-07 21:38 被阅读19次

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

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

    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

    啊!!!

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

    相关文章

      网友评论

        本文标题:python一键追星,爬取个人微博主页下的图片

        本文链接:https://www.haomeiwen.com/subject/hpgihctx.html