微博爬虫-发布微博以及获取微博资料

微博爬虫-发布微博以及获取微博资料

1.发布微博

为了减少限制我们使用移动版本登录
首先登录微博,这里我采用cookie来登录

登录.png
cookie.png

如图,登录后获得cookie
登录后先发布一个微博查看需要传输什么值

查看发送微博需要填写什么.png

图中可以看出,我们需要2个值,一个为st一个为content,且content已知值为我们要发送的微博
发送微博的url在图片里面可以看出是:https://m.weibo.cn/api/statuses/update

找出st的值.png

接着我们从这个网页里面找到st值生成的地方,找到后我们就可以开始写发送微博的代码了

import re
import requests


headers = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Mobile Safari/537.36'}
cookie = {"Cookie": "你的cookie"}
url = 'https://m.weibo.cn/compose'
html = requests.get(url, cookies=cookie).text
pattern = r'st:(.+)'
st = re.findall(pattern, html)[0].replace("'",'').replace(',','').replace(' ','')
post_url = 'https://m.weibo.cn/api/statuses/update'
postdata = {
            'st':st,
            'content':'测试Python发微博!',
            }
update = requests.post(post_url, data=postdata, headers=headers, cookies=cookie)

在这里我用正则找出来,不过加了‘’就找不到了,所以只能粗略找出来再把不要的替换掉,接着就可以传入postdata进行发微博了
结果如图:

深度截图_选择区域_20170815141038.png

2.爬取评论

其实这个是我爬取一半遇到个坑,然后百度后找到的教程- -。。。
先贴上链接这里
然后是代码

from lxml import html
import requests
import json
import re

class CrawlWeibo:

    # 获取指定博主的所有微博card的list
    def getWeibo(self,id,page):#id(字符串类型):博主的用户id,page(整型):微博翻页参数

        url='https://m.weibo.cn/api/container/getIndex?type=uid&value='+id+'&containerid=107603'+id+'&page='+str(page)
        response=requests.get(url)
        ob_json=json.loads(response.text)

        list_cards=ob_json['cards']
        return list_cards# 返回本页所有的cards

    # 返回某条微博的热门评论的list
    def getComments(self,id,page):# id(字符串类型):某条微博的id,page(整型):评论翻页参数
        url='https://m.weibo.cn/api/comments/show?id='+id+'&page='+str(page)
        response=requests.get(url)
        ob_json=json.loads(response.text)

        list_comments=ob_json['hot_data']
        return list_comments

    def printAllTopic(self,page):
        list_cards=self.getWeibo('1713926427',page)
        # 遍历当页所有微博,输出内容,并根据id查找输出热门评论
        for card in list_cards:
            if card['card_type']==9:# 过滤出微博,card_type=9的是微博card,card_type=11的是推荐有趣的人
                id=card['mblog']['id']
                text=card['mblog']['text']
                if re.search('___', text)!=None:# 用正则匹配,将博文有下划线的微博过滤出来,有下划线的是“话题微博”
                     print (u"### 话题: "+text+'\n')

                     #根据微博id获取热门评论,并输出
                     list_comments=crawl_weibo.getComments(id, 1)# 热门评论只需要访问第一页
                     count_hotcomments=1
                     for comment in list_comments:
                         created_at=comment['created_at']# 发表日期时间
                         like_counts=comment['like_counts']# 点赞数

                         text=comment['text']# 评论内容
                         tree=html.fromstring(text)
                         text=tree.xpath('string(.)')# 用string函数过滤掉多余标签

                         name_user=comment['user']['screen_name']# 评论者的用户名

                         source=comment['source']# 来源于哪个终端
                         if source=='':
                             source=u'未知'

                         pic_url=''# 评论内容的图片
                         if 'pic' in comment:
                             pic_url=comment['pic']['url']

                        # 输出评论数据
                         print (str(count_hotcomments),': **',name_user,'**',u'  **发表于:**'+created_at,u'  **点赞:**'+str(like_counts)+u'  **来自:**'+source)
                         print (text+'\n')
                         count_hotcomments=count_hotcomments+1
                     print ('***')

#实例化爬虫类并调用成员方法进行输出                     
crawl_weibo=CrawlWeibo()
crawl_weibo.printAllTopic(1)# 只输出一页进行示例展示

其实就是不断的解析JSON来获取自己想要的,搜索到榜姐后,点他的微博

获取榜姐首页JSON.png

可以找到生成微博的JSON文件
把URL提取后进去查看,可以看到JSON内容,然后COPY再到json.cn查看

首页JSON解释.png

之后就会发现我们要的微博都再card 9里面,提取之
再点进去评论列表,跟分析博文一样进行分析

评论.png

就能从里面提取精彩评论了,然而,只有8条- -
然后我就重新弄了一下,那里不是有个更多评论吗,点击后就能看到很多热门评论了,缺点是看不到图片。不过还好我主要捉取的是评论- -,然后下拉评论查找评论更新URL规则
然而我找不到第一页,却找到了第二页- -

热门评论1.png

查看JSON文件后,可以发现热门评论更改page就可以了1页有9个评论
然后更改里面的链接就差不多可以了,还有hot_data改为card_group

    def getComments(self,id,page):# id(字符串类型):某条微博的id,page(整型):评论翻页参数
        #url='https://m.weibo.cn/api/comments/show?id='+id+'&page='+str(page)
        url = 'https://m.weibo.cn/single/rcList?format=cards&id='+id+'&type=comment&hot=1&page='+str(page)
        response=requests.get(url)
        ob_json=json.loads(response.text)

        list_comments=ob_json['card_group']
        return list_comments

3.爬取微博内容

原来我写的有点乱,不好的代码还是扔在电脑里面好了。现在爬取微博内容直接对以上获取到的list_cards解析就行了,不过图片有3种形式,分别是缩略图,压缩图,原图

               "thumbnail_pic":"http://wx1.sinaimg.cn/thumbnail/6628711bgy1fca7isjl7nj215o15o167.jpg",
                "bmiddle_pic":"http://wx1.sinaimg.cn/bmiddle/6628711bgy1fca7isjl7nj215o15o167.jpg",
                "original_pic":"http://wx1.sinaimg.cn/large/6628711bgy1fca7isjl7nj215o15o167.jpg",

4.爬取用户信息

这个栗子同样也是使用移动版微博来获取资料(我这里是从我关注列表里面获取的)
使用cookie登录后 ,再去查看关注列表的信息。因为是用下拉获取信息的,所以多次下拉后可以发现改变page = 的数值就可以获取到新的列表

关注列表.png

可以看到列表里面有个链接:https://m.weibo.cn/api/container/getSecond?containerid=1005051896662273_-_FOLLOWERS&page=2 这个containerid这个不知道是什么,之前也没看过。所以重新跑回主页查看

真id获取.png

可以发现,再这个页面已经出现这个containerid了
到这个页面获取就好了,然而我直接填写= =。。
接着获取到json后就像上面一样开始分析,下面是一个分析的记过栗子

            "card_type":10,
            "user":{
                "id":5909185172,
                "screen_name":"拜托啦学妹",
                "profile_image_url":"https://tva1.sinaimg.cn/crop.0.0.976.976.180/006rUl0gjw8f4uuscl9p5j30r40r410i.jpg",
                "profile_url":"https://m.weibo.cn/u/5909185172?uid=5909185172&luicode=10000012&lfid=1005051896662273_-_FOLLOWERS&featurecode=20000320",
                "statuses_count":390,
                "verified":true,         有没有认证
                "verified_type":0,       -1 为没认证。0为个人认证,其余为企业认证
                "verified_type_ext":1,     _ext为1时(橙色V), _ext为0(黄色v)_ext   
                "verified_reason":"微博知名搞笑视频博主 教育视频自媒体 微博签约自媒体",       认证说明
                "description":"一个只属于大学生的街访",                             简介
                "gender":"f",                           性别:f为女m为男
                "mbtype":12,                        12都是个人账户,0也是。2有个人账户也有企业账户,11也是企业账户
                "urank":27,                           等级
                "mbrank":5,                          会员等级
                "follow_me":false,                    是否关注我
                "following":true,                   我是否关注他
                "followers_count":5445128,            粉丝数量
                "follow_count":69,                   关注量
                "cover_image_phone":"https://tva1.sinaimg.cn/crop.0.0.640.640.640/549d0121tw1egm1kjly3jj20hs0hsq4f.jpg",
                "desc1":null,           
                "desc2":null
            },

然后就可以获取了,结果如下:

id: 5364707424 姓名: Just春苑 简介: 🐮 等级: 9 性别: m 是否关注我: True
id: 5406572240 姓名: 魅蓝手机 简介:  等级: 17 性别: m 是否关注我: False
id: 3230122083 姓名: Flyme 简介: Flyme是魅族基于Android内核为旗下智能手机量身打造的操作系统,旨在为用户提供优秀的交互体验和贴心的在线服务。源自内心的设计,做最本质的思考,Flyme定会让你刮目相看! 等级: 35 性别: m 是否关注我: False
id: 5608433557 姓名: 微博雷达 简介:  等级: 5 性别: f 是否关注我: False
id: 1861358972 姓名: 气势如虹Leslie 简介: 去认识更广阔的世界 等级: 16 性别: m 是否关注我: True
id: 1992613670 姓名: 凤凰新闻客户端 简介:  等级: 37 性别: m 是否关注我: False
id: 2629306884 姓名: CSDN产品客服 简介: 还在为你的下载积分太少发愁吗?快来参加CSDN做任务,拿积分活动~~攒下载积分啦~~http://task.csdn.net/rule.aspx 等级: 21 性别: f 是否关注我: False
id: 2251036402 姓名: Colombo丶Fd 简介:  等级: 14 性别: m 是否关注我: True
id: 1720064601 姓名: RNF_牧牧子 简介: |后院43024|轮协3.0|脱了一半的伪宅|世上稀有的腐男|绝对领域万岁|我终于过了CCIE|全(部)球(类)通 等级: 31 性别: m 是否关注我: True
id: 2472362284 姓名: RNF_某清 简介: 微不足道。 等级: 22 性别: m 是否关注我: True

这部分内容的代码:

import re
import requests
import json
from lxml import etree


cookie = {"Cookie": "你的cookie"}
url = 'https://m.weibo.cn/api/container/getSecond?containerid=1005051896662273_-_FOLLOWERS&page=7'
html = requests.get(url, cookies=cookie)
ob_json=json.loads(html.text)
list_cards=ob_json['cards']
for card in list_cards:
    if card['card_type'] == 10:
        id = card['user']['id']
        name = card['user']['screen_name']
        description = card['user']['description']
        urank = card['user']['urank']
        gender = card['user']['gender']
        follow_me = card['user']['follow_me']
        if gender == 'm':
            gender =='男'
        if gender == 'f':
            gender =='女'
        else:
            gender == '其他'
        if follow_me:
            follow_me == '是'
        else:
            follow_me == '否'
        print('id:', id, '姓名:', name ,'简介:', description ,'等级:', urank, '性别:', gender ,'是否关注我:', follow_me)






最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,569评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,613评论 4 59
  • 正走在青春道路上的我,面对着大大小小不间断的考试,不知道现在的你们或者当初的前辈们,面对考试,是选择笑着面对还是哭...
    z志阅读 188评论 0 1
  • 编者按:2017年是不平凡的一年(当然,事实上,每一年都是 课程视频: 1)斯坦福开放CS231nSpring 2...
    朱立志阅读 541评论 0 1