使用Scrapy自动预约51Talk外教老师

Python024

使用Scrapy自动预约51Talk外教老师,第1张

以前购买了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 中

>>> while True:

s = input("> ")

if s == '':

break

a = [int(i) for i in s.split()]

a.sort()

r = list(range(len(a), 0, -1))

print(sum([a[i] * r[i]for i in range(len(a))]))

> 5 10 8 7

67

> 3 2 1

10

>