2018-02-04更新---支付寶爬蟲(Python-Scrapy版本)

問題反饋

在使用中有任何問題,能夠反饋給我,如下聯繫方式跟我交流
  • Author: Leo
  • Wechat: Leo-sunhailin
  • E-mail: 379978424@qq.com
  • Github URL: 項目連接


目前的進度

  • 2018年2月4日:python

  • 2018年1月:git

    • 將更新提上日程,在測試二維碼登陸.先上個半成品github

    • 原先密碼登錄的如今基本上不能用了.由於我的頁面多了一種反爬手段,其次就是跳出二維碼頁面.web

    • 上面這些問題,將在以後儘可能解決.sql

  • 大概在2017年11月~12月的樣子:json

    • 開始出現跳出驗證碼頁面了.緣由應該是支付寶反爬的模型加強了.框架

    • 這段時間維護時間很少,都是我的測試沒有更新代碼上去scrapy

  • 2017年10月 參加DoraHacks時:ide

    • 當時可以獲取到帳單和帳戶信息.

開發環境

  • 系統版本:Win10 x64測試

  • Python版本:3.4.4

    • Python庫版本列表:

      • Pillow: 5.0.0

      • Scrapy:1.4.0

      • selenium:3.8.1

      • requests:2.18.4

      • pymongo:3.6.0

      • python_dateutil:2.6.1

  • Ps: 必定要配好Python的環境,否則Scrapy的命令可能會跑不起來


安裝和運行方式

* 安裝庫
# 項目根目錄下,打開命令行
    pip install -r requirements.txt
複製代碼
  • 啓動
# 項目根目錄下,啓動爬蟲
    scrapy crawl AlipaySpider -a username="你的用戶名" -a password="你的密碼"
    
    # 必選參數
    -a username=<帳號>
    -a password=<密碼>
    
    # 可選參數
    -a option=<爬取類型>
    # 1 -> 購物; 2 -> 線下; 3 -> 還款; 4 -> 繳費
    # 這裏面有四種類型數據對應四種不一樣的購物清單
    
    #####################################################
    # 實驗版本
    scrapy crawl AlipayQR
    
    # 暫時尚未參數, 能登錄到我的頁面了.
複製代碼

功能

  1. 模擬登陸支付寶(帳號密碼和二位均可以登錄)
  2. 獲取自定義帳單記錄和花唄剩餘額度(2017年10月份的時候我的頁面還有花唄總額度的,後面改版沒有了.再以後又出現了,應該是支付寶內部在作調整)
  3. 數據存儲在MongoDB中(暫時存儲在MongoDB,後續支持sqlite,json或其餘格式的數據)
  4. 日誌記錄系統,啓動爬蟲後會在項目根目錄下建立一個Alipay.log的文件(同時寫入文件和輸出在控制檯)

技術點

吐槽一下: 這點可能沒啥好說,由於代碼是從本身以前寫的用非框架的代碼搬過來的,搬過來以後主要就是適應Scrapy這個框架,理解框架的意圖和執行順序以及項目的結構,而後進行兼容和測試。

我這個項目主要就用到Spider模塊(即爬蟲模塊),Pipeline和item(即寫數據的管道和實體類)

Downloader的那塊基本沒作處理,由於核心仍是在用selenium + webdriver,解析頁面用的是Scrapy封裝好的Selector.

Scrapy具體的流程看下圖: (從官方文檔搬過來的)

image


題外話

題外話模塊: 上一段講到了一個Selector,這個是東西是Scrapy基於lxml開發的,可是真正用的時候其實和lxml的selector有點區別.

舉個例子吧:

# 兩段相同的標籤獲取下面的文字的方式
# lxml
name = str(tr.xpath('td[@class="name"]/p/a/text()').strip()

# Scrapy
name = tr.xpath('string(td[@class="name"]/p/a)').extract()[0].strip()
複製代碼

兩行代碼對同一個標籤的文字提取的方法有些不同,雖然到最後的結果同樣。

lxml中有一個"string(.)"方法也是爲了提取文字,可是這個方法是要在先指定了父節點或最小子節點後再使用,就能夠獲取父節點如下的全部文字或最小子節點對應的文字信息.

而Scrapy的Selector則能夠在"string(.)"裏面寫入標籤,方便定位,也很清晰的看出是要去獲取文字信息.

具體區別其實能夠對比下我非框架下的和Scrapy框架下的代碼,裏面用xpath定位的方式有點不同.

  1. selenium + lxml: 非框架
  2. Scrapy + selenium: Scrapy

將來的進度

  1. 數據源保存的可選擇性(從多源選擇單源寫入到多源寫入)
  2. 修改配置文件的自由度(增長修改settings.py的參數)
  3. 儘量優化爬蟲的爬取速度
  4. 研究Scrapy的自定義命令的寫法,提升擴展性
相關文章
相關標籤/搜索