微博爬蟲-發(fā)布微博以及獲取微博資料

微博爬蟲-發(fā)布微博以及獲取微博資料

1.發(fā)布微博

為了減少限制我們使用移動(dòng)版本登錄
首先登錄微博皇拣,這里我采用cookie來登錄

登錄.png
cookie.png

如圖,登錄后獲得cookie
登錄后先發(fā)布一個(gè)微博查看需要傳輸什么值

查看發(fā)送微博需要填寫什么.png

圖中可以看出疫萤,我們需要2個(gè)值城须,一個(gè)為st一個(gè)為content,且content已知值為我們要發(fā)送的微博
發(fā)送微博的url在圖片里面可以看出是:https://m.weibo.cn/api/statuses/update

找出st的值.png

接著我們從這個(gè)網(wǎng)頁里面找到st值生成的地方稳摄,找到后我們就可以開始寫發(fā)送微博的代碼了

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':'測(cè)試Python發(fā)微博!',
            }
update = requests.post(post_url, data=postdata, headers=headers, cookies=cookie)

在這里我用正則找出來棱诱,不過加了‘’就找不到了泼橘,所以只能粗略找出來再把不要的替換掉,接著就可以傳入postdata進(jìn)行發(fā)微博了
結(jié)果如圖:

深度截圖_選擇區(qū)域_20170815141038.png

2.爬取評(píng)論

其實(shí)這個(gè)是我爬取一半遇到個(gè)坑迈勋,然后百度后找到的教程- -炬灭。。粪躬。
先貼上鏈接這里
然后是代碼

from lxml import html
import requests
import json
import re

class CrawlWeibo:

    # 獲取指定博主的所有微博card的list
    def getWeibo(self,id,page):#id(字符串類型):博主的用戶id,page(整型):微博翻頁參數(shù)

        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

    # 返回某條微博的熱門評(píng)論的list
    def getComments(self,id,page):# id(字符串類型):某條微博的id昔穴,page(整型):評(píng)論翻頁參數(shù)
        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)
        # 遍歷當(dāng)頁所有微博镰官,輸出內(nèi)容,并根據(jù)id查找輸出熱門評(píng)論
        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')

                     #根據(jù)微博id獲取熱門評(píng)論笨腥,并輸出
                     list_comments=crawl_weibo.getComments(id, 1)# 熱門評(píng)論只需要訪問第一頁
                     count_hotcomments=1
                     for comment in list_comments:
                         created_at=comment['created_at']# 發(fā)表日期時(shí)間
                         like_counts=comment['like_counts']# 點(diǎn)贊數(shù)

                         text=comment['text']# 評(píng)論內(nèi)容
                         tree=html.fromstring(text)
                         text=tree.xpath('string(.)')# 用string函數(shù)過濾掉多余標(biāo)簽

                         name_user=comment['user']['screen_name']# 評(píng)論者的用戶名

                         source=comment['source']# 來源于哪個(gè)終端
                         if source=='':
                             source=u'未知'

                         pic_url=''# 評(píng)論內(nèi)容的圖片
                         if 'pic' in comment:
                             pic_url=comment['pic']['url']

                        # 輸出評(píng)論數(shù)據(jù)
                         print (str(count_hotcomments),': **',name_user,'**',u'  **發(fā)表于:**'+created_at,u'  **點(diǎn)贊:**'+str(like_counts)+u'  **來自:**'+source)
                         print (text+'\n')
                         count_hotcomments=count_hotcomments+1
                     print ('***')

#實(shí)例化爬蟲類并調(diào)用成員方法進(jìn)行輸出                     
crawl_weibo=CrawlWeibo()
crawl_weibo.printAllTopic(1)# 只輸出一頁進(jìn)行示例展示

其實(shí)就是不斷的解析JSON來獲取自己想要的,搜索到榜姐后勇垛,點(diǎn)他的微博

獲取榜姐首頁JSON.png

可以找到生成微博的JSON文件
把URL提取后進(jìn)去查看脖母,可以看到JSON內(nèi)容,然后COPY再到json.cn查看

首頁JSON解釋.png

之后就會(huì)發(fā)現(xiàn)我們要的微博都再card 9里面闲孤,提取之
再點(diǎn)進(jìn)去評(píng)論列表谆级,跟分析博文一樣進(jìn)行分析

評(píng)論.png

就能從里面提取精彩評(píng)論了,然而讼积,只有8條- -
然后我就重新弄了一下肥照,那里不是有個(gè)更多評(píng)論嗎,點(diǎn)擊后就能看到很多熱門評(píng)論了勤众,缺點(diǎn)是看不到圖片舆绎。不過還好我主要捉取的是評(píng)論- -,然后下拉評(píng)論查找評(píng)論更新URL規(guī)則
然而我找不到第一頁们颜,卻找到了第二頁- -

熱門評(píng)論1.png

查看JSON文件后吕朵,可以發(fā)現(xiàn)熱門評(píng)論更改page就可以了1頁有9個(gè)評(píng)論
然后更改里面的鏈接就差不多可以了猎醇,還有hot_data改為card_group

    def getComments(self,id,page):# id(字符串類型):某條微博的id,page(整型):評(píng)論翻頁參數(shù)
        #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.爬取微博內(nèi)容

原來我寫的有點(diǎn)亂边锁,不好的代碼還是扔在電腦里面好了」檬常現(xiàn)在爬取微博內(nèi)容直接對(duì)以上獲取到的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.爬取用戶信息

這個(gè)栗子同樣也是使用移動(dòng)版微博來獲取資料(我這里是從我關(guān)注列表里面獲取的)
使用cookie登錄后 贡蓖,再去查看關(guān)注列表的信息曹鸠。因?yàn)槭怯孟吕@取信息的,所以多次下拉后可以發(fā)現(xiàn)改變page = 的數(shù)值就可以獲取到新的列表

關(guān)注列表.png

可以看到列表里面有個(gè)鏈接:https://m.weibo.cn/api/container/getSecond?containerid=1005051896662273_-_FOLLOWERS&page=2 這個(gè)containerid這個(gè)不知道是什么斥铺,之前也沒看過彻桃。所以重新跑回主頁查看

真id獲取.png

可以發(fā)現(xiàn),再這個(gè)頁面已經(jīng)出現(xiàn)這個(gè)containerid了
到這個(gè)頁面獲取就好了晾蜘,然而我直接填寫= =邻眷。。
接著獲取到j(luò)son后就像上面一樣開始分析剔交,下面是一個(gè)分析的記過栗子

            "card_type":10,
            "user":{
                "id":5909185172,
                "screen_name":"拜托啦學(xué)妹",
                "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,         有沒有認(rèn)證
                "verified_type":0,       -1 為沒認(rèn)證肆饶。0為個(gè)人認(rèn)證,其余為企業(yè)認(rèn)證
                "verified_type_ext":1,     _ext為1時(shí)(橙色V)岖常, _ext為0(黃色v)_ext   
                "verified_reason":"微博知名搞笑視頻博主 教育視頻自媒體 微博簽約自媒體",       認(rèn)證說明
                "description":"一個(gè)只屬于大學(xué)生的街訪",                             簡介
                "gender":"f",                           性別:f為女m為男
                "mbtype":12,                        12都是個(gè)人賬戶驯镊,0也是。2有個(gè)人賬戶也有企業(yè)賬戶竭鞍,11也是企業(yè)賬戶
                "urank":27,                           等級(jí)
                "mbrank":5,                          會(huì)員等級(jí)
                "follow_me":false,                    是否關(guān)注我
                "following":true,                   我是否關(guān)注他
                "followers_count":5445128,            粉絲數(shù)量
                "follow_count":69,                   關(guān)注量
                "cover_image_phone":"https://tva1.sinaimg.cn/crop.0.0.640.640.640/549d0121tw1egm1kjly3jj20hs0hsq4f.jpg",
                "desc1":null,           
                "desc2":null
            },

然后就可以獲取了板惑,結(jié)果如下:

id: 5364707424 姓名: Just春苑 簡介: ?? 等級(jí): 9 性別: m 是否關(guān)注我: True
id: 5406572240 姓名: 魅藍(lán)手機(jī) 簡介:  等級(jí): 17 性別: m 是否關(guān)注我: False
id: 3230122083 姓名: Flyme 簡介: Flyme是魅族基于Android內(nèi)核為旗下智能手機(jī)量身打造的操作系統(tǒng),旨在為用戶提供優(yōu)秀的交互體驗(yàn)和貼心的在線服務(wù)偎快。源自內(nèi)心的設(shè)計(jì)冯乘,做最本質(zhì)的思考,F(xiàn)lyme定會(huì)讓你刮目相看晒夹! 等級(jí): 35 性別: m 是否關(guān)注我: False
id: 5608433557 姓名: 微博雷達(dá) 簡介:  等級(jí): 5 性別: f 是否關(guān)注我: False
id: 1861358972 姓名: 氣勢(shì)如虹Leslie 簡介: 去認(rèn)識(shí)更廣闊的世界 等級(jí): 16 性別: m 是否關(guān)注我: True
id: 1992613670 姓名: 鳳凰新聞客戶端 簡介:  等級(jí): 37 性別: m 是否關(guān)注我: False
id: 2629306884 姓名: CSDN產(chǎn)品客服 簡介: 還在為你的下載積分太少發(fā)愁嗎往湿?快來參加CSDN做任務(wù),拿積分活動(dòng)~~攢下載積分啦~~http://task.csdn.net/rule.aspx 等級(jí): 21 性別: f 是否關(guān)注我: False
id: 2251036402 姓名: Colombo丶Fd 簡介:  等級(jí): 14 性別: m 是否關(guān)注我: True
id: 1720064601 姓名: RNF_牧牧子 簡介: |后院43024|輪協(xié)3.0|脫了一半的偽宅|世上稀有的腐男|絕對(duì)領(lǐng)域萬歲|我終于過了CCIE|全(部)球(類)通 等級(jí): 31 性別: m 是否關(guān)注我: True
id: 2472362284 姓名: RNF_某清 簡介: 微不足道惋戏。 等級(jí): 22 性別: m 是否關(guān)注我: True

這部分內(nèi)容的代碼:

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 ,'等級(jí):', urank, '性別:', gender ,'是否關(guān)注我:', follow_me)






最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末领追,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子响逢,更是在濱河造成了極大的恐慌绒窑,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舔亭,死亡現(xiàn)場(chǎng)離奇詭異些膨,居然都是意外死亡蟀俊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門订雾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肢预,“玉大人,你說我怎么就攤上這事洼哎√逃常” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵噩峦,是天一觀的道長锭沟。 經(jīng)常有香客問我,道長识补,這世上最難降的妖魔是什么族淮? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮凭涂,結(jié)果婚禮上祝辣,老公的妹妹穿的比我還像新娘。我一直安慰自己切油,他們只是感情好蝙斜,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著白翻,像睡著了一般乍炉。 火紅的嫁衣襯著肌膚如雪绢片。 梳的紋絲不亂的頭發(fā)上滤馍,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音底循,去河邊找鬼巢株。 笑死,一個(gè)胖子當(dāng)著我的面吹牛熙涤,可吹牛的內(nèi)容都是我干的阁苞。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼祠挫,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼那槽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起等舔,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤骚灸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后慌植,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體甚牲,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡义郑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了丈钙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片非驮。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖雏赦,靈堂內(nèi)的尸體忽然破棺而出劫笙,到底是詐尸還是另有隱情,我是刑警寧澤喉誊,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布邀摆,位于F島的核電站,受9級(jí)特大地震影響伍茄,放射性物質(zhì)發(fā)生泄漏栋盹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一敷矫、第九天 我趴在偏房一處隱蔽的房頂上張望例获。 院中可真熱鬧,春花似錦曹仗、人聲如沸榨汤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽收壕。三九已至,卻和暖如春轨蛤,著一層夾襖步出監(jiān)牢的瞬間蜜宪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來泰國打工祥山, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留圃验,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓缝呕,卻偏偏與公主長得像澳窑,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子供常,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,515評(píng)論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理摊聋,服務(wù)發(fā)現(xiàn),斷路器栈暇,智...
    卡卡羅2017閱讀 134,600評(píng)論 18 139
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫麻裁、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,029評(píng)論 4 62
  • 正走在青春道路上的我,面對(duì)著大大小小不間斷的考試悲立,不知道現(xiàn)在的你們或者當(dāng)初的前輩們鹿寨,面對(duì)考試,是選擇笑著面對(duì)還是哭...
    z志閱讀 194評(píng)論 0 1
  • 編者按:2017年是不平凡的一年(當(dāng)然薪夕,事實(shí)上脚草,每一年都是 課程視頻: 1)斯坦福開放CS231nSpring 2...
    朱立志閱讀 550評(píng)論 0 1