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

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

作者: 小霸王_e024 | 来源:发表于2019-07-07 14:32 被阅读0次

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

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

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

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

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

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

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

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

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

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

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

    分析可以知道:

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

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

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

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

    拉动滑条刷新新的内容

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

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

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

    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 NT10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106BIDUBrowser/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函数  下载图片

    ```

    defdown(isd='',lio=''):

        headers = {

            'user-agent': 'Mozilla/5.0 (Windows NT10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106BIDUBrowser/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()

    ```

    函数就这样编写完成了


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

    啊!!!

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

    相关文章

      网友评论

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

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