問題反饋
在使用中有任何問題,可以反饋給我,以下聯絡方式跟我交流- Author: Leo
- Wechat: Leo-sunhailin
- E-mail: 379978424@qq.com
- Github URL: 專案連結
目前的進度
-
2018年2月4日:
- 更新說明看: Release
-
2018年1月:
-
將更新提上日程,在測試二維碼登入.先上個半成品
-
原先密碼登陸的現在基本上不能用了.因為個人頁面多了一種反爬手段,其次就是跳出二維碼頁面.
-
上面這些問題,將在之後儘量解決.
-
-
大概在2017年11月~12月的樣子:
-
開始出現跳出驗證碼頁面了.原因應該是支付寶反爬的模型增強了.
-
這段時間維護時間不多,都是個人測試沒有更新程式碼上去
-
-
2017年10月 參加DoraHacks時:
- 當時能夠獲取到賬單和賬戶資訊.
開發環境
-
系統版本: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
# 暫時還沒有引數, 能登陸到個人頁面了.
複製程式碼
功能
- 模擬登入支付寶(賬號密碼和二位都可以登陸)
- 獲取自定義賬單記錄和花唄剩餘額度(2017年10月份的時候個人頁面還有花唄總額度的,後面改版沒有了.再之後又出現了,應該是支付寶內部在做調整)
- 資料儲存在MongoDB中(暫時儲存在MongoDB,後續支援sqlite,json或其他格式的資料)
- 日誌記錄系統,啟動爬蟲後會在專案根目錄下建立一個Alipay.log的檔案(同時寫入檔案和輸出在控制檯)
技術點
吐槽一下: 這點可能沒啥好說,因為程式碼是從自己之前寫的用非框架的程式碼搬過來的,搬過來之後主要就是適應Scrapy這個框架,理解框架的意圖和執行順序以及專案的結構,然後進行相容和測試。
我這個專案主要就用到Spider模組(即爬蟲模組),Pipeline和item(即寫資料的管道和實體類)
Downloader的那塊基本沒做處理,因為核心還是在用selenium + webdriver,解析頁面用的是Scrapy封裝好的Selector.
Scrapy具體的流程看下圖: (從官方文件搬過來的)
題外話
題外話模組: 上一段講到了一個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定位的方式有點不一樣.
未來的進度
- 資料來源儲存的可選擇性(從多源選擇單源寫入到多源寫入)
- 修改配置檔案的自由度(增加修改settings.py的引數)
- 儘可能優化爬蟲的爬取速度
- 研究Scrapy的自定義命令的寫法,提高擴充套件性