1. 程式人生 > >Python程式碼登入新浪微博並自動發微博

Python程式碼登入新浪微博並自動發微博

前言

對於很少玩微博@張行之_的我來說,微博內容少的可憐。所以本人就想:能不能寫個成功程式來幫我發微博。這個程式要滿足以下要求:

  1. 自動化,自動登入微博,自動發微博。
  2. 微博內容要有意義,不能是隨機生成的字元。
  3. 可以設定每隔一段時間發一條微博,頻率不能太快,當然也不能太慢。

於是,就誕生了這個程式,程式碼使用純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點要求,不過還存在一些問題:

  1. 爬蟲部分還存在很多冗餘,可以進一步優化。
  2. 產生微博內容時可能會生成相同的內容,尤其是目標網站更新頻率不高時。

相關推薦

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."