工具向——用python做一個(gè)簡易的微博助手

如果你有想要特別關(guān)注的微博賬號(hào)旋奢,但是又沒有裝手機(jī)微博(或者說關(guān)閉了微博的垃圾消息提醒)又不是很喜歡刷微博的人刻像,想要第一時(shí)間獲取關(guān)心的微博消息怎么辦呢。
或許你可以試試這樣鞠值,利用爬蟲每隔一小段時(shí)間間隔就重新獲取一次關(guān)注賬號(hào)的微博年枕,比對(duì)是否有新消息芳悲,如果有則發(fā)送到你的微信賬號(hào)上贮喧,當(dāng)然也可以發(fā)送到你的郵箱栅盲,不過微信更及時(shí)更友好點(diǎn)。
這個(gè)想法最早在一個(gè)python課程(很抱歉記不得是哪個(gè)課程了白胀,記憶力太差椭赋。。)里看到或杠,這里簡單實(shí)現(xiàn)下哪怔。
爬蟲部分利用requests庫和BeautifulSoup庫很容易完成爬取和解析。實(shí)現(xiàn)時(shí)間間隔就用最簡單的睡眠(time.sleep)向抢。發(fā)送到微信使用itchat庫發(fā)送到自己的文件助手就好了认境,很簡單。
當(dāng)然電腦端同一微信賬號(hào)登錄只能有一個(gè)挟鸠,也就是不能同時(shí)使用該賬號(hào)的電腦版微信了叉信,解決方案是采用登錄微信小號(hào)發(fā)送給大號(hào)的形式,這樣消息提醒也更明確艘希,不容易忽略硼身。
這里打包好的可執(zhí)行程序只是發(fā)送文件助手的方案。
鏈接:http://pan.baidu.com/s/1kVvCpvh 密碼:cxza
代碼github

效果圖枢冤,以segmentfault微博賬號(hào)為例

使用方法

輸入你的cookie和要獲取的微博賬號(hào)uid
在對(duì)彈出的二維碼微信掃碼登錄后就可以接收到消息了

獲取你的微博賬戶cookie

獲取用戶uid

找到用戶的uid 如 segmentfault 為 2036070420

代碼

# 使用pyinstaller 一鍵生成可執(zhí)行文件 位于dist目錄下
# pyinstaller weibohelper.py --onefile
from bs4 import BeautifulSoup
import time
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

print('請(qǐng)輸入cookie:')
cookie = input()

print('請(qǐng)輸入uid:')
uid = input()
uids = (uid, )

headers = {
    "Cookies": cookie,
    "User-Agent":'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1'
}
r = requests.session()
r.headers.update(headers)

# 獲取某條微博的評(píng)論
def get_comments_from_one_weibo(id):
    try:
        json = r.get(
            ('https://m.weibo.cn/api/comments/show?'
             'id={0}&page=1').format(id),
            verify=False,
        ).json()
        if json['ok'] == 1:
            comments = []
            for c in json['data']:
                comments.append(BeautifulSoup(c['text'], 'lxml').text)
                comments.append(c['user']['screen_name'])
            comments.reverse()
            return comments
        else:
            return ()
    except:
        return ()
    

# 根據(jù)用戶uid獲取該用戶第一頁的微博消息
def get_single_user_fisrt_weibo(uid):
    page_num = 1
    nickname = None
    weibo = None
    try:
        json = r.get(
            ('https://m.weibo.cn/api/container/getIndex?'
            'is_search[]=0&'
            'visible[]=0&'
            'is_all[]=1&'
            'is_tag[]=0&'
            'profile_ftype[]=1&'
            'page={0}&'
            'jumpfrom=weibocom&'
            'sudaref=weibo.com&'
            'type=uid&'
            'value={1}&'
            'containerid=107603{1}').format(page_num, uid),
            verify=False,
        ).json()
    except:
        return None, None
    if json['ok'] == 0:
        print('sth wrong')
        return None, None
    else:
        for card in json['cards']:
            if card['card_type'] == 9:
                weibo = [
                    card['mblog']['created_at'],
                    BeautifulSoup(
                        card['mblog']['text'], 'lxml'
                    ).text.replace(' \u200b\u200b\u200b', ''),
                    *get_comments_from_one_weibo(
                        card['mblog']['id']),
                ]

                nickname = card['mblog']['user']['screen_name'] + ' '
                
                break # 取第一個(gè)即可
    print('success for', nickname, ' - time', time.ctime())
    return nickname, weibo

# 使用itchat登錄網(wǎng)頁版微信
import itchat
itchat.auto_login()
# 以小號(hào)登錄形式鸠姨,要先找到大號(hào)的賬戶
# username = itchat.search_friends(name='xx')[0]['UserName']
username = 'filehelper'

import json
from collections import defaultdict
records = defaultdict(lambda : (None, None))
while 1:
    for uid in uids:
        nickname, weibo = get_single_user_fisrt_weibo(uid)
        
        try_times = 5
        while nickname == None:
            nickname, weibo = get_single_user_fisrt_weibo(uid)
            try_times -= 1
            if try_times == 0:
                break
        if try_times == 0:
            continue

        if records[nickname][1:] != weibo[1:]:
            # print('發(fā)現(xiàn)新微博:', weibo)
            itchat.send(
                '\n---\n'.join((nickname, *weibo)),
                toUserName=username)
            records[nickname] = weibo # 記錄當(dāng)前微博信息
            
            with open('data.json', 'w', encoding='utf-8') as f:
                json.dump(records, f, ensure_ascii=False)
        else:
            print('沒有新消息', time.ctime())
            pass
    time.sleep(120)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市淹真,隨后出現(xiàn)的幾起案子讶迁,更是在濱河造成了極大的恐慌,老刑警劉巖核蘸,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巍糯,死亡現(xiàn)場離奇詭異,居然都是意外死亡客扎,警方通過查閱死者的電腦和手機(jī)祟峦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來徙鱼,“玉大人宅楞,你說我怎么就攤上這事「み海” “怎么了厌衙?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長绞绒。 經(jīng)常有香客問我婶希,道長,這世上最難降的妖魔是什么蓬衡? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任喻杈,我火速辦了婚禮彤枢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘筒饰。我一直安慰自己缴啡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布龄砰。 她就那樣靜靜地躺著盟猖,像睡著了一般讨衣。 火紅的嫁衣襯著肌膚如雪换棚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天反镇,我揣著相機(jī)與錄音固蚤,去河邊找鬼。 笑死歹茶,一個(gè)胖子當(dāng)著我的面吹牛夕玩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播惊豺,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼燎孟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了尸昧?” 一聲冷哼從身側(cè)響起揩页,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎烹俗,沒想到半個(gè)月后爆侣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡幢妄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年兔仰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蕉鸳。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乎赴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出潮尝,到底是詐尸還是另有隱情榕吼,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布衍锚,位于F島的核電站友题,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏戴质。R本人自食惡果不足惜度宦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一踢匣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧戈抄,春花似錦离唬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至裸诽,卻和暖如春嫂用,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背丈冬。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國打工嘱函, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人埂蕊。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓往弓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蓄氧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子函似,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)喉童,斷路器撇寞,智...
    卡卡羅2017閱讀 134,667評(píng)論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,182評(píng)論 25 707
  • 點(diǎn)擊查看原文 Web SDK 開發(fā)手冊(cè) SDK 概述 網(wǎng)易云信 SDK 為 Web 應(yīng)用提供一個(gè)完善的 IM 系統(tǒng)...
    layjoy閱讀 13,768評(píng)論 0 15
  • 立春的時(shí)候重抖, 大家說,春天來了 我不相信 不管穿多少 我還冷的哆嗦 后來祖灰,陽光開始變暖 北方的陽光不再只是照明的了...
    種花人閱讀 322評(píng)論 0 0
  • 如果愛是一種權(quán)利 請(qǐng)來得像一場橫征暴斂 民脂民膏都給你钟沛,只要你拿的了 如果愛有一種力量 請(qǐng)來得像本世紀(jì)最大的臺(tái)風(fēng)災(zāi)...
    鶑鵅閱讀 130評(píng)論 0 0