欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

小白教程-——如何爬虫新浪微博用户图片,手把手教你

程序员文章站 2023-12-23 00:02:16
...

第一步 获取微博用户uid

简单版获取微博数据 不用拟登录 我们就需要用到 微博的手机版网站
链接: link.

小白教程-——如何爬虫新浪微博用户图片,手把手教你
找到想要获取的用户 获取链接里的uid
小白教程-——如何爬虫新浪微博用户图片,手把手教你
再检查网页,找到微博的api接口,接口里获取的数据包就有我们想要的内容
小白教程-——如何爬虫新浪微博用户图片,手把手教你

第二步 写代码

前期分析完后我们就可以来写代码了 欧耶


```python
import pprint
import requests
import time
from urllib.parse import urlencode
from multiprocessing import Pool
import json
import os

先引入需要的库,pprint可以让json展现更加明了
接下来 获取单页信息 我们就可以一页一页的获取信息,不建议把这个函数合在一起写

def Get_page(page,uid):
# https://m.weibo.cn/api/container/getIndex?uid=1885611142&t=0
#&luicode=10000011&lfid=100103&type=uid&value=1885611142&containerid=1076031885611142  
#这个是我取到的链接 我们可以一个个分析 发现最重要的是 uid containerid 和 page
    headers = {
    'Host':'m.weibo.cn',
    'Referer':'https://m.weibo.cn/u/1885611142?uid=1885611142&t=0&luicode=10000011&lfid=100103type%3D1%26q%3D%E5%AD%94%E9%9B%AA%E5%84%BF',
    'X-Requested-With':'XMLHttpRequest',
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
#这个可以从你的浏览器里检查网页里面找 目的是模拟浏览器申请页面
       } 
    params={
        'uid':uid,
        't':0,
        'luicode':10000011,
        'lfid':100103,
        'containerid':'107603'+str(uid),
        'page':page
    }
    url='https://m.weibo.cn/api/container/getIndex?' +urlencode(params)

    response=requests.get(url,headers=headers,timeout=10)
    re=response.json()
    try:
        if response.status_code==200:
#              pprint.pprint(re)
             return re
    except requests.ConnectionError as e:
        print("error",e.args)


然后获取每个图片的url
小白教程-——如何爬虫新浪微博用户图片,手把手教你

def Get_imge(re):
    picsurl=[]
    items=re.get('data').get('cards')
    for item in items:
        try:
            pics=item.get('mblog').get('pics')
            if pics is not None:
                for p in pics:
                    v=p.get('large').get('url')
                    print(v)
                    picsurl.append(v)
        except:continue
    return picsurl
    

                    

然后就是下载照片啦 注意每个文件名不能一样 所以我们用链接后面的乱码为文件名

   def DownLoadPics(picsurl,sin_id):
            headers = {
                          'X-Requested-With':'XMLHttpRequest',
                          'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
                          'referer': 'https://m.weibo.cn',
             } 
            wen="C:/"+sin_id
            if not os.path.exists(wen):
                os.makedirs(wen)
            for i in picsurl:
                qr=requests.get(i,headers=headers)
                print(qr)
                path=wen+'/'+sin_id+i.split('/')[-1]
                print(path)
                with open(path, 'wb')as f:
                    f.write(qr.content)
                    print('-' * 10)

最后是main函数,我们爬取多个用户也不怕 只要添加uid就可以

if __name__ == '__main__':
#     try:
        uid=['1885611142','5620452341','2992978081','3050737061','6047467945']
        for j in uid:
            a=Get_page(1,j)
            sin=a.get('data').get('cards')[1].get('mblog').get('user').get('screen_name')
            for i in range(1,10):
                o=Get_page(i,j)
                a=Get_imge(o)
                DownLoadPics(a,sin)
#     except:pass

这个也可以多线程做 有机会我会更新多线程怎么做

结果

小白教程-——如何爬虫新浪微博用户图片,手把手教你

小白教程-——如何爬虫新浪微博用户图片,手把手教你

相关标签: python 微博

上一篇:

下一篇: