PTTCrawler

tags: Insowe

GitHub

GitHub

功能模組

  • 爬蟲
    • 使用者資訊
    • 各版發文資訊
    • 各版回文資訊
    • ASN查詢
  • 資料庫
    • 欄位設計
  • 腳本
    • 爬蟲(排程腳本設計)
    • CSV匯出
    • ODS匯出
  • 查詢
    • Input
      • board_name, start_at, end_at
    • Output
      • board_name, start_at, end_at, domestic_ip, foreign_ip

python套件 LICENSE

  • alembic
    MIT License
  • selenium
    Apache License 2.0
  • SQLAlchemy
    MIT License
  • ipwhois
    BSD 2-Clause Simplified License
  • pyexcel-ods
    BSD 3-Clause License
  • python-crontab
    GNU Lesser General Public License v3.0

Todo

[急][重要] - 要滿足客戶的基本功能

  • 1. 控制碼
    • 選擇用bsdconv套件去除控制碼
    • 選擇用selenuim連上ptt的websocket版本,因為版面由CSS上色,可以直接拿原字串
      • 上次上站時間、上次上站IP、有效文章、登入次數
      • 要做瀏覽器的例外處理,如果在user電腦找不到Chrome或者Firefox要提醒
  • 2. 匯出功能
  • 3. IpAsn腳本
  • 4. 排程腳本
    • 1. 加log
      • crontab不給stdout,要埋簡單的log才能測試功能有沒有正常跑
  • 5. 查詢功能
  • 6. PttArticleCrawler的crawling方法要分為兩個,一個負責抓取indexweb_id,一個負責抓取與web_id對應的文章
  • 7. 記錄上次執行結果,避免從頭開始跑
  • 8. 文章跟推文的版本控制及變數
    • 新增動作addupgrade

[急][不重要] - 現在不做未來可能留地雷或影響功能

  • 1. 文章爬蟲被PTT擋連線
    • cloudflare-scrape
      • 沒有用,可能是cloudflare有改版
      • 直接帶cloudflare回傳的cookie就有解了
    • 可能是requests套件不含一般瀏覽器的cookie,考慮用selenuim解決,實際效果待測試
    • 要測是不是被cloudflare擋
      • 要帶cloudflare的cookie
      • 被斷線的時候用Browser連線
        • 測是不是要帶cookie
      • 被斷線的時候用pythn.requests連線
        • 測是不是被擋IP
  • 2. term.ptt.cc也會防機器人,查詢user id速度太快會被強制斷線
    • 原因是Buffer還沒拿完就get_buffer,導致抓不到正確資料,頁面就跑掉了,目前測了300個user id
    • Handle斷線的事件
    • 找適當的delay時間

[不急][重要] - 現在不做未來會不好debug

pass

[不急][不重要] - 不影響功能,但會影響使用心情(X)

  • 1. 爬文章執行速度緩慢
    • 卡在DB

要問小莊的問題

  • 推文的更新流程
    • 小莊: 文章每抓一個版本, 留時間, 跟版本序號放到 db 裡面, 不用跟舊的比對, 一直抓新的加到 db 裡面去
    • 3.3.1這個步驟是因為如果要比對哪些推文是已經存在的很耗時間也很麻煩,所以先刪掉全部再加回來,但缺點是萬一文章沒修過但推文有被修過,就會遺失那個推文,所以要問小莊這樣實作OK嗎?
    1. 抓文章,新文章跳到(2),舊文章跳到(3)
    2. 新文章
      1. 新增article, article_history
      2. 將整串推文加到最新的文章歷史記錄
    3. 舊文章
      1. 檢查舊文章有沒有修改,有修改跳到(2),沒修改跳到(3)
      2. 有修改
        1. 新增文章歷史記錄
        2. 整串推文加到最新的記錄
      3. 沒修改
        1. 刪掉最近記錄的文章推文
        2. 把新爬到的推文加回去
  • 匯出功能
    • 小莊: 就分開SHEET,只要有匯出即可,文章可以先統一先匯最新版本
    • 全部欄位弄在一起匯出會很雜,所以osd匯出會把有相關的資料整理在一個sheet,並分成多個sheet,而csv匯出則分成多個子檔案
    • sheet
      • article
        • web_id
        • board_name
        • author
        • title
        • content
        • post_ip
          • asn
          • asn_cidr
          • asn_country_code
          • asn_date
          • asn_description
          • asn_registry
        • post_datetime
        • last_end_at
      • push
        • article_web_id
        • push
          • username
          • tag
          • content
          • ip
            • asn
            • asn_cidr
            • asn_country_code
            • asn_date
            • asn_description
            • asn_registry
          • datetime
      • user_record
        • username
        • login_times
        • valid_article_count
        • login_datetime
        • login_ip
          • asn
          • asn_cidr
          • asn_country_code
          • asn_date
          • asn_description
          • asn_registry
  • 使用者上站紀錄
    • 抓使用者上站紀錄比較沒什麼用途,而且PTT使用者10萬上下,很難一次抓完,建議改成要查詢特定使用者有效文章數及上站次數的時候再查
Select a repo