Python程式碼登入新浪微博並自動發微博
前言
對於很少玩微博@張行之_的我來說,微博內容少的可憐。所以本人就想:能不能寫個成功程式來幫我發微博。這個程式要滿足以下要求:
- 自動化,自動登入微博,自動發微博。
- 微博內容要有意義,不能是隨機生成的字元。
- 可以設定每隔一段時間發一條微博,頻率不能太快,當然也不能太慢。
於是,就誕生了這個程式,程式碼使用純Python實現,沒有使用微博SDK,主要是模擬HTTP操作。程式執行後會先登入微博,然後啟動一個定時器,每隔一段時間爬取秒拍、cnBeta、部落格園、TechWeb、推酷最新的內容,再轉發到微博。
試用了幾天,效果可以檢視我的微博:@張行之_。
整體結構
程式分為3個模組:微博登入
sinaWeibo
|----main.py
|----sinaWeiboLogin.py
|----config.py
|----logger.py
|----sendWeibo.py
|----TextFactory.py
|spider
|----__init__.py
|----utility.py
|----http.py
|----spider.py
|----cnbeta.py //解析cbbeta
|----cnblog.py //解析部落格園
|----techweb.py /解析techweb
|----tuicool.py //解析推酷
|----..... //更多解析
##使用
如果你只想使用該程式碼來發微博,並不關心程式碼是怎麼實現的,那麼你只需要讀這一節內容。
1. 下載,專案地址:
pip install rsa
pip install requests
2. 如果你的微博登入時要輸入驗證碼,該程式碼是登入不成功的,可以在賬號安全的登入保護中設定不輸入驗證碼。
##登入
登入網上有很多現成的方法,在GitHub上找到一個登入新浪微博的[Python程式碼][6],使用[requests][7],比urllib2更方便。程式碼依賴[requests][7]和[rsa][8]。程式碼有點舊,需要做一點修改。
WBCLIENT = 'ssologin.js(v1.4.5)' => WBCLIENT = 'ssologin.js(v1.4.18)'
兩個正則表示式也需要修改下:
login_url = re.search(r'replace\([\"\']([^\'\"]+)[\"\']', resp.text).group(1)
改為:
login_url = re.search('replace\\(\'([^\']+)\'\\)', resp.text).group(1)
login_str = re.match(r'[^{]+({.+?}})', resp.text).group(1)
改為:
login_str = login_str = re.search('\((\{.*\})\)', resp.text).group(1)
登入時要注意,如果需要輸入驗證碼,這段程式碼是會登入失敗的,可以在賬號安全的登入保護中設定不輸入驗證碼。
##定時自動發微博
新浪微博發微博的介面是:
`http://www.weibo.com/aj/mblog/add?ajwvr=6&__rnd=時間戳`
時間戳使用` int(time.time() * 1000`即可設定。
Post提交資料:
"location" : "v6_content_home",
"appkey" : "",
"style_type" : "1",
"pic_id" : "",
"text" : 微博內容,
"pdetail" : "",
"rank" : "0",
"rankid" : "",
"module" : "stissue",
"pub_type" : "dialog",
"_t" : "0",
提交資料時需要設定Headers:
`self.http.headers[“Referer”] = “http://www.weibo.com/u/%s/home?wvr=5” % str(self.uid)`
uid在登入時會返回。
在Python中啟動一個定時器(Timer),每當定時器觸發的時候向這個介面Post資料就能實現自動發微博了。
def newTimer(self):
self.timer = Timer(TIME_SLOG, self.main, ()).start()
def stop(self):
log("結束任務")
self.timer.cancel()
pass
def main(self):
self.sendWeibo()
if TIMER_REPEAT:
self.newTimer()
def sendWeibo(self):
text = TextFactory.getText()
self.update(text)
log(u"傳送微博:" + text)
##微博內容生產
要產生有意義的微博內容,一般需要從網站上爬取。當然,也可以把內容寫入文字再定時傳送。內容都是從網上爬取的,因此需要實現一個爬蟲,用Python的requests爬取網頁非常方便,幾行程式碼搞定。使用`SGMLParser`解析網頁也是非常方便的。爬蟲部分在爬取網頁都是一樣的,解析時不同,所以只需要分別對每一個網站實現一個[`SGMLParser`][10]子類就能實現多個網站的爬取了。
為了從不同網站爬取資料,程式碼實現一個輪詢機制,用一個容器儲存各個網站的爬蟲物件,在每次獲取微博內容時使用不同的爬蟲物件。
spiders = [
Spider(miaopai.HOME_URL, miaopai.MiaopaParser()),
Spider(cnbeta.HOME_URL, cnbeta.CnbetaParser()),
Spider(cnblog.HOME_URL, cnblog.CnblogParser()),
Spider(techweb.HOME_URL, techweb.TechwebParser()),
Spider(tuicool.HOME_URL, tuicool.TuicoolParser()),
Spider(miaopai.HOME_URL, miaopai.MiaopaParser()),
]
currentIndex = 0
count = len(spiders)
def getText():
spider = nextSpider()
text = spider.getAMessage()
return text
def nextSpider():
global currentIndex
spider = spiders[currentIndex]
currentIndex = (currentIndex + 1) % count
return spider
###新增爬蟲
程式碼設計具有較好地擴充套件性,在爬蟲類`spder.py`中定義一個解析屬性
class Spider(object):
def __init__(self, homeUrl, parser):
super(Spider, self).__init__()
self.homeUrl = homeUrl
self.parser = parser
def getAMessage(self):
html = http.get(self.homeUrl)
self.parser.feed(html)
return self.parser.getMsg()
在建立`Spider`物件時,只需要注入不同的解析物件,就能解析不同的網站內容了,甚至還可實現從其他渠道獲取內容。
在`TextFactory.py`中實現了輪詢機制,當有新的解析類時,只需在`TextFactory.py`中的`spiders`新增一個就行。
結語
該程式碼已經基本滿足了前言的3點要求,不過還存在一些問題:
- 爬蟲部分還存在很多冗餘,可以進一步優化。
- 產生微博內容時可能會生成相同的內容,尤其是目標網站更新頻率不高時。
相關推薦
Python程式碼登入新浪微博並自動發微博
前言 對於很少玩微博@張行之_的我來說,微博內容少的可憐。所以本人就想:能不能寫個成功程式來幫我發微博。這個程式要滿足以下要求: 自動化,自動登入微博,自動發微博。 微博內容要有意義,不能是隨機生成的字元。 可以設定每隔一段時間發一條微博,頻率不能太快,當
python模擬登入新浪微博自動獲得呼叫新浪api所需的code
其中client_id是我們的APP_KEY;redirect_url是我們的回撥頁面,就是我們一開始建立應用時設定的;regCallback具體我不知道是哪來的,但是其中有兩個變數,一個是APP_KEY,一個就是我們設定的回撥頁面;其它的表單內容都是固定的。請求程式碼如下:fields={ 'act
python抓取新浪微博評論並分析
1,實現效果 2,資料庫 3,主要步驟 1,輸入賬號密碼,模擬新浪微博登陸 2,抓取評論頁的內容 3,用正則表示式過濾出使用者名稱,評論時間和評論內容 4,將得到的內容存入資料庫 5,用SQL語句實現其他功能:例如統計評論次數等 4,詳細步驟 # -*- codi
Python爬取新浪微博用戶信息及內容
pro 目標 oss 來源 但是 blog .com 交流 exc 新浪微博作為新時代火爆的新媒體社交平臺,擁有許多用戶行為及商戶數據,因此需要研究人員都想要得到新浪微博數據,But新浪微博數據量極大,獲取的最好方法無疑就是使用Python爬蟲來得到。網上有一些關於使用Py
curl模擬登入新浪微博
<?php header('Content-type:text/html;charset=utf-8'); $loginUrl = 'https://login.sina.com.cn/sso/login.php?client=ssologin.js (v1.4.15)&_=140313879
【python 新浪微博爬蟲】python 爬取新浪微博24小時熱門話題top500
一、需求分析 模擬登陸新浪微博,爬取新浪微博的熱門話題版塊的24小時內的前TOP500的話題名稱、該話題的閱讀數、討論數、粉絲數、話題主持人,以及對應話題主持人的關注數、粉絲數和微博數。 二、開發語言 python2.7 三、需要匯入模組 import
Java 模擬登入新浪微博(Cookie)
最近需要對微博的資料進行一些收集, 首先從登入開始 1. 通過GET請求login public static String login(String username, String password) throws MalformedURLExcept
python sdk 獲取新浪微博簽到資訊
不得不說廖大神這個sdk 在我這個新手看來寫的真是太完美了,介面呼叫寫成動態,封裝授權,返回jsondict 處理起來實在是方便 # -*- coding: utf-8 -*- ''' Created on 2016年12月18日 @author: bitwater
java 模擬登入新浪微博(通過cookie)
java模擬登入新浪微博(通過cookie) 這幾天一直在研究新浪微博的爬蟲,發現爬取微博的資料首先要登入。本來打算是通過賬號和密碼模擬瀏覽器登入。但是現在微博的登入機制比較複雜。通過賬號密碼還沒有登入成功QAQ。所以就先記錄下,通過cookie直接訪問自
Android授權登入新浪微博獲取使用者個人資訊
記得第一次發博文的時候我寫了一篇文章,題為“”,裡面介紹瞭如何使用各官方提供的SDK來實現分享功能。那麼今天我們來講講如何通過新浪微博授權登入獲取使用者資訊,大家都知道,現在很多軟體除了本地註冊登入之外,還增加了第三方登入功能,最常見的是直接授權QQ等軟體來登入應用而無需
手把手教你selenium_第一個指令碼_登入新浪微博
假定各位以前看過前兩篇文章,已經搭建好了環境,現在開始錄製回放第一個selenium的指令碼:登入新浪微博 基本的步驟是: 1. 開啟firefox,設定seleniumIDE選項,使之可以錄製下junit的程式碼; 2. 使用seleniumIDE進行錄製,
用python爬取新浪微博資料 (無需手動獲取cookie)
從java 轉為python from selenium import webdriver import selenium from selenium.webdriver.common.desired_capabilities import DesiredCapabi
PHP 新浪微博開放平臺 新浪雲平臺 SAE 開發微博應用 建立微博應用的過程
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Python爬取新浪微信評論,瞭解一下
環境: Python3 + windows。 開發工具:Anaconda + Jupyter / VS Code/pycharm/sublime等等都可以(你開心就好) 學習效果: 認識爬蟲 / Robots協議 瞭解瀏覽器開發者工具 動態載入頁面
python 爬蟲1 開始,先拿新浪微博開始
大括號 版本 install esp con data- 定位 ble Language 剛剛開始學。 目的地是兩個。一個微博,一個貼吧 存入的話,臨時還沒想那麽多。先存到本地目錄吧 分詞和推薦後面在整合 mysql mongodb hadoop redius 後面在用
Python爬蟲開源項目代碼,爬取微信、淘寶、豆瓣、知乎、新浪微博、QQ、去哪網等 代碼整理
http server 以及 pro 模擬登錄 取數 存在 漏洞 搜狗 作者:SFLYQ 今天為大家整理了32個Python爬蟲項目。 整理的原因是,爬蟲入門簡單快速,也非常適合新入門的小夥伴培養信心。所有鏈接指向GitHub,祝大家玩的愉快~ 1、WechatSogou
一鍵分享到QQ空間、QQ好友、新浪微博、微信程式碼
通過qq空間、qq聊天、新浪微博和微信二維碼分享平臺提供的介面,實現把網頁中對應的圖片、標題、描述的資訊引數用javascript獲取後傳進介面中,實現一鍵分享。 使用到的介面
新浪微部落格戶端開發之授權登入+獲取微博列表
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Android 第三方登入之新浪微博授權登入
Android第三方登入的優點有很多,這裡先簡單略過,後續再補充。先寫微博,其他的慢慢補充 新浪微博授權登入 新浪微博開放平臺 新浪微博Android SDK 主要流程如下: 這裡只是寫了一下程式的邏輯,前期的註冊申請工作可以參考官網,或者直接點這裡:新手指南 /**
909422229_新浪微博API錯誤程式碼
錯誤程式碼說明 錯誤返回值格式 JSON { "request" : "/statuses/home_timeline.json", "error_code" : "20502", "error" : "Need you follow uid."