使用Scrapy自动预约51Talk外教老师
以前购买了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 中
scrapy源码的入口是哪个
当你运行 scrapy command arg 这样的命令时,这里的 scrapy 实质是一个 python 脚本,它接受参数,首先调用 scrapy/cmdline.py 中的 execute() 函数. 在 scrapy 安装目录下的 cmdline.py 文件中:
...
def execute(argv=None, settings=None):
if argv is None:
argv = sys.argv
...
if settings is None:
settings = get_project_settings()
check_deprecated_settings(settings)
...
inproject = inside_project()
cmds = _get_commands_dict(settings, inproject)
...
cmd.crawler_process = CrawlerProcess(settings)
...
...
if __name__ == '__main__':
execute()
上面的代码主要做了这么几件事:
读取scrapy.cfg配置文件
读取settings设置文件
导入相应的module爬虫模块(inside_project)
解析命令行参数(cmds:为相应的Scrapy Command对象列表)
作为整个程序的入口,其主要做的事情是解析用户爬虫的配置属性,根据传递的命令行参数,调用对应的代码来执行相应的任务.
scrapy command arg 中 command 可以为 crawl / startproject / genspider / runspider / deploy / …等命令,每一个命令在 scrapy/commands 文件夹下都有对应 command类.
对于 scrapy crawl test ,就会调用 commands/crawl.py 中的 *** 去执行相应的爬虫任务
作者:yg myth
4.python爬虫之新建 scrapy 爬虫项目(抓取和保存)
1.win10 下 win + r 打开cmd 切换新项目的目录
2.新建scrapy项目的命令:
可以利用pycharm 打开项目文件夹编辑项目
3.items.py
声明爬取的字段
4.新建scrapy 爬虫
用命令 scrapy genspider doubanmovie "movie.douban.com" 创建爬虫。
5.运行爬虫
5.1 创建运行脚本
(一)、在 scrapy.cfg 同级目录下创建 pycharm 调试脚本 run.py,避免每次运行爬虫输入密码,内容如下:
6.修改robottxt协议
修改 settings 中的 ROBOTSTXT_OBEY = True 参数为 False,因为默认为 True,就是要遵守 robots.txt 的规则, robots.txt 是遵循 Robot协议 的一个文件,它保存在网站的服务器中,它的作用是,告诉搜索引擎爬虫,本网站哪些目录下的网页不希望你进行爬取收录。在 Scrapy 启动后,会在之一时间访问网站的 robots.txt 文件,然后决定该网站的爬取范围。查看 robots.txt 可以直接网址后接 robots.txt 即可。
一般构建爬虫系统,建议自己编写Item Pipeline,就可以在open(path)选择自己的保存路径
参考: # scrapy爬虫事件以及数据保存为txt,json,mysql
7.1保存为json格式时出现乱码的解决方式:
scrapy抓取豆瓣书籍保存json文件乱码问题
中文默认是Unicode,如:
\u5317\u4eac\u5927\u5b66
在setting文件settings.py中设置:
就可以解决了
第二种解决办法
或在cmd中传入 -s FEED_EXPORT_ENCODING='utf-8'
参考:
花了2万多买的Python70个项目,现在分享给大家,练手进厂靠它了
前言:
不管学习哪门语言都希望能做出实际的东西来,这个实际的东西当然就是项目啦,不用多说大家都知道学编程语言一定要做项目才行。
这里整理了70个Python实战项目列表,都有完整且详细的教程,你可以从中选择自己想做的项目进行参考学习练手,你也可以从中寻找灵感去做自己的项目。
1、【Python 图片转字符画】
2、【200行Python代码实现2048】
3、【Python3 实现火车票查询工具】
4、【高德API+Python解决租房问题 】
5、【Python3 *** 识别】
6、【Python 破解验证码】
7、【Python实现简单的Web服务器】
8、【pygame开发打飞机 游戏 】
9、【Django 搭建简易博客】
10、【Python基于共现提取《釜山行》人物关系】
11、【基于scrapy爬虫的天气数据采集(python)】
12、【Flask 开发轻博客】
13、【Python3 图片隐写术】
14、【Python 实现简易 Shell】
15、【使用 Python 解数学方程】
16、【PyQt 实现简易浏览器】
17、【神经 *** 实现手写字符识别系统 】
18、【Python 实现简单画板】
19、【Python实现3D建模工具】
20、【NBA常规赛结果预测——利用Python进行比赛数据分析】
21、【神经 *** 实现人脸识别任务】
22、【Python文本解析器】
23、【Python3 OpenCV 视频转字符动画】
24、【Python3 实现淘女郎照片爬虫 】
25、【Python3实现简单的FTP认证服务器】
26、【基于 Flask 与 MySQL 实现番剧推荐系统】
27、【Python 实现端口扫描器】
28、【使用 Python 3 编写系列实用脚本】
29、【Python 实现康威生命 游戏 】
30、【川普撞脸希拉里(基于 OpenCV 的面部特征交换) 】
31、【Python 3 实现 Markdown 解析器】
32、【Python 气象数据分析 -- 《Python 数据分析实战》】
33、【Python实现键值数据库】
34、【k-近邻算法实现手写数字识别系统】
35、【ebay在线拍卖数据分析】
36、【Python 实现英文新闻摘要自动提取 】
37、【Python实现简易局域网视频聊天工具】
38、【基于 Flask 及爬虫实现微信 娱乐 机器人】
39、【Python实现Python解释器】
40、【Python3基于Scapy实现DDos】
41、【Python 实现密码强度检测器】
42、【使用 Python 实现深度神经 *** 】
43、【Python实现从excel读取数据并绘制成精美图像】
44、【人机对战初体验:Python基于Pygame实现四子棋 游戏 】
45、【Python3 实现可控制肉鸡的反向Shell】
46、【Python打造漏洞扫描器 】
47、【Python应用马尔可夫链算法实现随机文本生成】
48、【数独 游戏 的Python实现与破解】
49、【使用Python定制词云】
50、【Python开发简单计算器】
51、【Python 实现 FTP 弱口令扫描器】
52、【Python实现Huffman编码解压缩文件】
53、【Python实现Zip文件的暴力破解 】
54、【Python3 智能裁切图片】
55、【Python实现网站模拟登陆】
56、【给Python3爬虫做一个界面.妹子图网实战】
57、【Python 3 实现图片转彩色字符】
58、【自联想器的 Python 实现】
59、【Python 实现简单滤镜】
60、【Flask 实现简单聊天室】
61、【基于PyQt5 实现地图中定位相片拍摄位置】
62、【Python实现模板引擎】
63、【Python实现遗传算法求解n-queens问题】
64、【Python3 实现命令行动态进度条】
65、【Python 获取挂号信息并邮件通知】
66、【Python实现java web项目远端自动化更新部署】
67、【使用 Python3 编写 Github 自动周报生成器】
68、【使用 Python 生成分形图片】
69、【Python 实现 Redis 异步客户端】
70、【Python 实现中文错别字高亮系统】
最后:
以上项目列表希望可以给你在Python学习中带来帮助~
获取方式:转发 私信“1”
0条大神的评论