python爬蟲實踐: 豆瓣小組命令列客戶端

acrazing發表於2019-02-16

主要特性

  • 前一陣重新組織了一下程式碼, 加了命令列help資訊, 用起來更方便了一些
  • 初步實現了豆瓣小組及使用者相關的API爬蟲和請求
  • 基於requests和lxml, 沒有用高階的諸如scrapy之類的爬蟲工具
  • 所有的命令列輸出都是標準的json格式, 可以使用jq操作

安裝

僅支援python3

pip3 install --upgrade dbapi

使用

兩種命令模式: 客戶端介面呼叫和豆瓣模組介面呼叫

# 呼叫客戶端自身API, 比如 dbapi use <cookies>
dbapi <api> [options...]

# 呼叫豆瓣模組API, 比如 dbapi group list_user_topics
dbapi <module> <api> [options...]
  1. 檢視幫助資訊: 可以列出所有的命令及引數

    dbapi --help
  2. 使用者登入: 有兩種形式, 一種是直接用使用者名稱和密碼登入, 另一種是直接使用cookie, 因為沒有做驗證碼破解, 所以在頻繁登入遇到驗證碼之後可以通過Chrome控制檯拿到cookie之後直接丟給客戶端登入

    # 使用者名稱和密碼登入, 注意密碼是在命令列裡的, 有可能會在你的歷史記錄裡面留下密碼
    # 雖然這是使用者模組的命令, 但是因為是全域性依賴, 所以就放到客戶端裡面了
    dbapi login <username> <password>
    
    # 使用cookie登入, 注意cookie裡面關鍵的session id被設定了http only, 需要到network tab下面獲取
    dbapi use <cookies>
  3. 重新整理會話資訊: 檢查本地儲存的會話資訊是否已經過期, 會話資訊會預設儲存到$HOME/.__cache__dbapi.json

    dbapi flush
  4. 命令列表: 目前有使用者(people)模組和小組(group)模組的命令, 具體如下:

    # -------- 小組部分 --------#
    # 建立評論
    dbapi group add_comment <topic_id> <content> <reply_id>
    # 建立小組
    dbapi group add_group <kwargs>
    # 建立討論
    dbapi group add_topic <group_alias> <title> <content>
    # 獲取討論資訊
    dbapi group get_topic <topic_id>
    # 申請加入小組
    dbapi group join_group <group_alias> <message>
    # 退出小組
    dbapi group leave_group <group_alias>
    # 話題點贊
    dbapi group like_topic <topic_id>
    # 獲取評論過的話題列表
    dbapi group list_commented_topics <start>
    # 獲取評論列表
    dbapi group list_comments <topic_id> <start>
    # 獲取加入的小組列表
    dbapi group list_joined_groups <user_alias>
    # 已加入的所有小組的話題列表
    dbapi group list_joined_topics <start>
    # 獲取點讚的話題列表
    dbapi group list_liked_topics <user_alias> <start>
    # 獲取推薦的話題列表
    dbapi group list_reced_topics <user_alias> <start>
    # 獲取小組話題列表
    dbapi group list_topics <group_alias> <_type> <start>
    # 列出使用者在話題下的所有回覆
    dbapi group list_user_comments <topic_id> <user_alias>
    # 發表的話題
    dbapi group list_user_topics <start>
    # 推薦話題
    dbapi group rec_topic <topic_id>
    # 刪除評論
    dbapi group remove_comment <topic_id> <comment_id> <reason> <other>
    # 刪除話題下所有自己的評論
    dbapi group remove_commented_topic <topic_id>
    # 刪除小組
    dbapi group remove_group <group_id>
    # 刪除話題
    dbapi group remove_topic <topic_id>
    # 搜尋小組
    dbapi group search_groups <keyword> <start>
    # 搜尋話題
    dbapi group search_topics <keyword> <sort> <start>
    # 喜歡話題
    dbapi group undo_like_topic <topic_id>
    # 取消推薦話題
    dbapi group undo_rec_topic <rec_id>
    # 更新話題
    dbapi group update_topic <topic_id> <title> <content>
    
    
    # -------- 使用者部分 --------#
    # 新增相簿
    dbapi people add_album <kwargs>
    # 新增相簿評論
    dbapi people add_album_comment <kwargs>
    # 新增照片
    dbapi people add_photo <kwargs>
    # 新增照片評論
    dbapi people add_photo_comment <photo_id> <content>
    # 新增說說
    dbapi people add_status <kwargs>
    # 獲取相簿
    dbapi people get_album <album_id>
    # 獲取使用者資訊
    dbapi people get_people <user_alias>
    # 獲取照片
    dbapi people get_photo <photo_id>
    # 喜歡照片
    dbapi people like_photo <photo_id>
    # 喜歡說說
    dbapi people like_status <status_id>
    # 獲取相簿列表
    dbapi people list_albums <user_alias>
    # 獲取關注使用者列表
    dbapi people list_contacts <user_alias> <start>
    # 獲取照片評論列表
    dbapi people list_photo_comments <photo_id> <start>
    # 獲取照片喜歡列表
    dbapi people list_photo_likes <photo_id> <start>
    # 獲取照片推薦列表
    dbapi people list_photo_recs <photo_id> <start>
    # 獲取照片列表
    dbapi people list_photos <album_id>
    # 獲取粉絲列表
    dbapi people list_rev_contacts <user_alias> <start>
    # 獲取說說評論列表
    dbapi people list_status_comments <user_alias> <start>
    # 獲取說說列表
    dbapi people list_statuses <user_alias> <start>
    # 推薦照片
    dbapi people rec_photo <photo_id>
    # 刪除相簿
    dbapi people remove_album <album_id>
    # 刪除相簿評論
    dbapi people remove_album_comment <kwargs>
    # 刪除照片
    dbapi people remove_photo <photo_id>
    # 刪除照片評論
    dbapi people remove_photo_comment <comment_id>
    # 刪除說說
    dbapi people remove_status <status_id>
    # 取消喜歡照片
    dbapi people undo_like_photo <photo_id>
    # 取消喜歡說說
    dbapi people undo_like_status <status_id>
    # 取消推薦照片
    dbapi people undo_rec_photo <photo_id>
    # 更新相簿
    dbapi people update_album <kwargs>

原始碼

GitHub: https://github.com/acrazing/d…

相關文章