摩拜單車爬蟲源碼解析

PHPz
發布: 2017-04-04 10:40:34
原創
2488 人瀏覽過

前兩篇文章分析了我為什麼抓取摩拜單車的介面以及數據分析的結果,這篇文章中講直接提供可運行的源代碼供學習。 。

#目錄結構


\analysis - jupyter做資料分析

\influx-importer - 匯入到influxdb,但之前沒怎麼弄好

    \
  • module

    s - 代理模組

  • \web - 即時圖形化顯示模組,當時只是為了學一下

    react
  • 而已,效果請見這裡
  • #crawler.py - 爬蟲核心程式碼

  • importToDb.py - 匯入到postgres資料庫進行分析

  • sql.sql - 建立表的sql
  • start.sh - 持續執行的腳本
  • 想法
  • 核心程式碼放在crawler.py中,資料先儲存在

    sqlite
  • 3資料庫中,然後去重複後匯出到csv檔案中以節省空間。大區域的資料。之內以及南至南湖的正方形區域。抓取一次。高。代碼在這裡。小程式的API接口,搞幾個
  • 變數

    就可以了,十分簡單。

    git clone https://github.com/derekhe/mobike-crawler
    python3 crawler.py
    登入後複製
  • 最後你可能要問頻繁的抓取IP沒有被封麼?其實摩拜單車是有IP的存取速度限制的,只不過破解之道非常簡單,就是用大量的代理。

我有一個代理池,每天基本上有8000以上的代理。在ProxyProvider中直接取得到這個代理池然後提供一個pick

函數

用於隨機選取得分前50的代理。請注意,我的代理池是每小時更新的,但是代碼中提供的

json

blob的代理列表僅僅是一個樣例,過一段時間後應該大部分都作廢了。 在這裡用到一個代理得分的機制。我並不是直接隨機選擇代理,而是將代理按照得分高低進行排序。每一次成功的請求將加分,而出錯的請求將減分。這樣一會兒就能選出速度、品質最佳的代理商。如果有需要還可以存下來下次繼續用。

    def start(self):
        left = 30.7828453209
        top = 103.9213455517
        right = 30.4781772402
        bottom = 104.2178123382

        offset = 0.002

        if os.path.isfile(self.db_name):
            os.remove(self.db_name)

        try:
            with sqlite3.connect(self.db_name) as c:
                c.execute('''CREATE TABLE mobike
                    (Time DATETIME, bikeIds VARCHAR(12), bikeType TINYINT,distId INTEGER,distNum TINYINT, type TINYINT, x DOUBLE, y DOUBLE)''')
        except Exception as ex:
            pass
登入後複製

在實際使用中,透過proxyProvider.pick()選擇代理,然後使用。如果代理程式出現任何問題,則直接用proxy.fatal_error()降低評分,這樣後續就不會選擇到這個代理了。

好了,基本上就到此了~~~其他的程式碼自己研究吧~~~#

以上是摩拜單車爬蟲源碼解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板