本文目錄一覽:
如何通過python調用新浪微博的API來爬取數據
1:安裝python(這個不多說啦)
2:下載新浪微博SDK的python包,解壓為weibopy目錄
3:申請AppKey,
流程:
1:通過oAuth認證
按我的理解簡化如下:
用戶在新浪微博給的頁面輸入賬號密碼,然後微博給應用一個PIN碼,這樣應用通過PIN碼才有許可權訪問該用戶的信息,而應用在整個過程中是接觸不到密碼的,所以用戶覺得很安全,後果很滿意
2:獲得認證之後,就可以使用微博SDK提供的API獲得信息啦
3:如果想設計web或者客戶端應用的話,那就繼續加個GUI好啦(未完成)
代碼:
#!/usr/bin/python
import webbrowser
from weibopy.auth import OAuthHandler
from weibopy.api import API
AppKey = ‘2525355147’
AppSecret = ‘2e2c7bcdfc362eace266d1f2bf83fe6b’
my_auth = OAuthHandler(AppKey , AppSecret)
webbrowser.open(my_auth.get_authorization_url())
verifier = raw_input(‘PIN: ‘).strip()
my_auth.get_access_token(verifier)
my_api = API(my_auth)
for comment in my_api.mentions():
object = comment
id = object.__getattribute__(“id”)
text = object.__getattribute__(“text”)
print str(id) + ” : ” + text
怎樣用python爬新浪微博大V所有數據
先上結論,通過公開的api如果想爬到某大v的所有數據,需要滿足以下兩個條件:
1、在你的爬蟲開始運行時,該大v的所有微博發布量沒有超過回溯查詢的上限,新浪是2000,twitter是3200。
2、爬蟲程序必須不間斷運行。
新浪微博的api基本完全照搬twitter,其中介面的參數特性與底層的NoSQL密不可分,建議先看點Nosql資料庫的設計理念有助於更好的理解api設計。
一般來說,如果決定爬某個大v,第一步先試獲取該用戶的基本信息,中間會包含一條最新的status,記下其中的id號作為基準,命名為baseId。
介面中最重要的兩個參數:
since_id:返回ID比since_id大的微博(即比since_id時間晚的微博),默認為0。
max_id:返回ID小於或等於max_id的微博,默認為0。
出於各種原因,獲取statuses的介面,固定為按id降序排列(scan_index_forward=false),即最新的statuses返回在前。假設該微博第一天上線,就一個用戶,發了一百條,id是1到100。而你在該用戶發了第50條的時候開始運行的爬蟲,即baseId=50。
假設按每次獲取10條歷史數據遞歸,先將max_id設為baseId,獲取該用戶id為41-50的微博,再將max_id設為41重複循環,直到返回微博數量為1或0。這步沒有問題。
獲取用戶最新的statuses就有些蛋疼了,since_id=50,同樣獲取10條數據,返回的並不是id值為51-60的數據,而是100-91的數據。簡單說就是你沒法從since_id逐步更新到用戶當前status,而是得一口氣從用戶當前status更新到上次爬蟲運行時得到的最後一條status。假設你的爬蟲一個月才運行一次,該用戶在這期間發了2300條微博,根據限制你只能更新2000條,這其中最老的300條在你的系統內就會出現「斷檔」。
最後一條,以上只針對公開的api,stackoverflow上twitter
API可以申請許可權突破數量限制和更改排序機制,微博也應該有類似機制。
如何用python抓微博數據
用Python寫爬蟲爬取微博數據的思路如下:
1、用base64加密用戶名之後仿造一個預登陸,用正則匹配得到各項參數。
2、用上一步里得到的參數,拼接密碼明文,再用RSA加密得到密文,並構造POST的form data。
3、使用構造好的form data仿造登錄請求
4、用正則匹配獲得跳轉的目標鏈接。
5、為了保持登陸,用cookiejar一類的工具綁定一個cookie就行了。
推薦學習《Python教程》。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/199564.html