以前購買了51Talk的課程,上了壹段時間沒有再上了,現在課程剩兩個月了,還有150節課,為了能夠不浪費,自己只能含淚每天上兩節課來彌補以前懶惰造成的後果,結果發現課程太難約了,尤其是好的老師還有指定的時間的課程,自己想找收藏1000+以上的老師,還要壹頁壹頁的翻,可是結果也只能是事倍功半,1000+的老師太難找了,並且我自己的預約時間更是沒有課,太慘了,最近剛學了Python,想著能不能通過爬蟲來預約課程,於是就有了這個腳本 51TalkBookLesson 來預約收藏1000+老師的課。
Scrapy中的CrawlSpider能夠通過Rule規則提取對應的鏈接並進跟進請求,非常的方便,不需要我們自己壹步壹步的去請求每壹個URL,這非常適合51Talk中老師比較多,頁面比較多的情況。
由於51Talk預約課程是需要登錄的,所以我使用Cookie來進行賬號的識別,我們需要為每壹個請求的header添加壹個Cookie
1、搜索菲律賓老師的請求
2、老師的信息課程列表的詳情
follow=False 是因為,老師詳情頁面會有壹些推薦老師,這些老師可能是歐美外教,是需要使用4次次卡的,我們禁止跟進這些意外情況。
這些請求我們都需要添加Cookie,請求1是需要放在start_urls裏面的,請求2的鏈接是通過Rule規則提取出來的,預約課程請求我則使用python的requests模塊,之所以不使用scrapy的FormRequest,是因為FormRequest會被放在已經添加在Scrapy隊列裏的頁面spider請求後面,當前面這些Spider請求完成之後,才能執行我們的預約課程,可是到那時候課程估計已經都沒有了,我們需要的是當找到課程之後能夠馬上請求
1、在根目錄下創建壹個名字為cookie的文件
2、我們需要先登錄51Talk網站,在開發模式下的控制臺輸入 document.cookie按回車,將cookie輸出並粘貼到cookie文件,不需要雙引號
Python中reques模塊中的請求,Cookie的格式是字符串類型的,可以直接使用,而scrapy.http中的Request的Cookie格式是字典格式的,那麽我們就需要將cookie文件中字符串類型cookie轉換成字典,下面是轉換方法:
搜索菲律賓老師 的鏈接是需要放在start_urls中的,所以這些請求是 start_requests(self): 方法來生成請求的,那麽就需要通過重寫該方法並為該請求加上Cookie
老師的信息課程列表的詳情 的鏈接是Rule規則提取的,那就需要在Rule中的 process_request 參數中的方法來進行處理,我寫的Rule中的 process_request 的值是 request_teacher ,那就需要定義這樣的壹個方法來處理Cookie:
預約課程 的鏈接是需要進post的請求的,我們使用下面的方法:
妳可以修改以上參數來預約相應的的老師及課程,其中 need_book_lessons 中的參數 20170524_44 代表2017年5月24日的21:30的課程, _ 前面的代表日期,後面的代表第幾節課,時間從 6 點開始,數字從 13 開始,每半個小時數字加 1 , 6:30 則為 14 , 7:00 為 15 ,依次類推,將妳需要預約課程的時間添加到 need_book_lessons 中