【Python_爬虫】【微博项目】爬取微博单个用户的图片以及博文内容

为了提高大家阅读兴趣,先看下效果图,左边是博文内容,右边是博文图片

【Python_爬虫】【微博项目】爬取微博单个用户的图片以及博文内容_第1张图片

该程序主要针对ajax网页编写,在ajax中找到真实的对应网址方式如下:网页先切换至手机端界面→点击Network→点击XHR→下拉微博内容会出现新的Name信息→分析请求头的URL

【Python_爬虫】【微博项目】爬取微博单个用户的图片以及博文内容_第2张图片

最后送上注释源码

import json
import os
import math
import  requests

#去标签的包
from w3lib.html import remove_tags


class Pa_WeiBo():
    #获取ajax网页url(作为接口只需修改该参数)
    base_url ='https://m.weibo.cn/api/container/getIndex?uid=2272339530&luicode=10000011&lfid=100103type%3D3%26q%3D%E6%B3%89%E5%B7%9E%E7%BE%8E%E9%A3%9F%26t%3D0&containerid=1076032272339530&page='
    #页码索引range制作
    ajax_index = requests.get(base_url+'2')
    json_index = json.loads(ajax_index.text)
    index = math.ceil((int(json_index['data']['cardlistInfo']['total'])/10))
    response = requests.get(base_url+str(1))
    #json能将ajax得到的Unicode自动转换成UTF-8
    res_dict = json.loads(response.text)
    user = res_dict['data']['cards'][0]['mblog']['user']['screen_name']
    if not os.path.exists(user):
        os.mkdir(user)
    #循环页码
    for i in range(index):
        #设置从第几页开始(i+N)
        response = requests.get(base_url+str(i+1))
        #json能将ajax得到的Unicode自动转换成UTF-8
        res_dict = json.loads(response.text)
        cards = res_dict['data']['cards']
        #循环微博条
        for card in cards:
            if 'mblog' in card:
                #remove_tags 去标签方法
                text = remove_tags(card['mblog']['text']).strip()
                #判断照片张数
                pic_num = card['mblog']['pic_num']
                if not pic_num == 0:
                    pics = card['mblog']['pics']
                    #循环图片
                    for pic in pics:
                        #低画质
                        img_url = remove_tags(pic['url']).strip()
                        #高画质
                        #img_url = remove_tags(pic['large']['url']).strip()
                        img_name = remove_tags(pic['pid']).strip()
                        response_img = requests.get(img_url)
                        with open(user+'/'+img_name+'.jpg','wb') as f:
                            f.write(response_img.content)
                            #print('图片:'+img_name+'写入成功')
                if not text =='':
                    print(text)
        print('-'*15+'第'+str(i+1)+'页'+'-'*15)


if __name__ == '__main__':
    Pa_WeiBo()

“ 代码仅用于学习交流,切勿用于商业用途,如因非法使用引起纠纷,一切后果由使用者承担。”

你可能感兴趣的:(python_爬虫)