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

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

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

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

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()

```

函数就这样编写完成了


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

啊!!!

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

上一篇下一篇

猜你喜欢

热点阅读