查看原文
其他

如何用爬虫技术帮助孩子秒到心仪的幼儿园(基础篇)

马超 Python大本营 2019-07-24


作者 | 马超,CSDN博客专家,金融科技从业者

来源 | CSDN博客


又快到了幼儿园报名的季节了,身边很多朋友有很多都说起要高价请枪手帮助秒杀报名的,其实幼儿园报名本质上还是一个比较简单的任务,粗略来看这只是一个网页爬虫加自动答题的需求。去年博主为孩子进行幼儿园报名时用了Selenium+Python的方式,效果不错。今年我在研究R语言的过程中,发现这个看似最简单的R语言也可以做相应的秒杀。我把相关编程的思路整理了一下,供各位参考。我尽量将全部的细节说清,对于读者也没有什么相应基础的要求。


首先我们的第一大原则是要保证相应操作的安全性,纯程序模拟交互的方式一旦被报名网站防护机制识破,后果将不堪设想。所以先将这种方式排除。


接下来我想到的是脚本化语言+可编程浏览器方式,我们知道Selenium是一个自动化的网页测试框架。支持Python、Java、R语言等可编程操作的接口,同时Selenium也完全可以脱离程序控制由用户手工操作,使用灵活。而且报名网站收到的全部信息也都是经由浏览器发出的,没有触发防护反爬机制的风险。考虑到R语言的门槛最低,所以这里以R语言为做为编程平台以例以便为更多爬虫初学者提供便利。


由于博主了解到很多报名网站都只支持Windows平台浏览器,所以这里就以Win平台为例,从零讲起。


一、安装R语言编程环境


1.打开网页https://mirrors.tuna.tsinghua.edu.cn/CRAN/,点击Download R for Windows,然后再点击install R for the first time,再点击Download R 3.5.2 for Windows下载R语言安装包。


2.安装R语言,双击下载的文件R-3.5.2-win.exe,最好进行全默认的安装,如果C盘空间太小也可以改变安装路径。


二、安装java环境


1.下载java安装包打开网大页https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html,注意在Accept License Agreement前点击一下,接受协议,然后选择windows 64版本即可。


2.双击下载的文件jdk-8u201-windows-x64.exe,全程下一步安装即可。注意需要记录下来安装路径。


3.添加环境变更。单击“计算机-属性-高级系统设置”,单击“环境变量”。在“系统变量”栏下单击“新建”,创建新的系统环境变量。


  1. 新建->变量名"JAVA_HOME",变量值"C:\Java\jdk1.8.0_05"(即JDK的安装路径) 

  2. 编辑->变量名"Path",在原变量值的最后面加上“;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin” 

  3. 新建->变量名“CLASSPATH”,变量值“.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar”


4.验证java是否安装成功:点击开始菜单在最下方的搜索程序和文件的文本框中输入cmd命令,进入命令行模式后,执行java -version能看到正确版本即可。


三、安装Rtools(可选)


由于Windows环境没有,到了进阶篇咱们就有可能需要用到Rtools,当然本篇还不涉及Rtools的内容,所以也可略去此步。


1.打开网页https://mirrors.tuna.tsinghua.edu.cn/CRAN/,点击Download R for Windows,点击Rtools,再选择推荐的版本Rtools35.exe (recommended),下载即可。


2.双击Rtools35.exe,注意在select component时一定要将全部的组件全部选上。


四、安装Selenium


1.安装chrome,进入https://chrome.en.softonic.com/这个官网的网址是可以访问的,直接点free download即可安装。


2.下载并安装Selenium插件,


(1)如果有CSDN积分的读者,到https://download.csdn.net/download/beyondma/10928992下载相应资源压缩包,并将压缩包中的chromedriver_win32.exe和selenium-server-standalone-3.9.1.jar拷贝至C:\Program Files (x86)\Google\Chrome\Application即可。


(2)如果没有CSDN积分。可以使用百度云下载

https://pan.baidu.com/s/10gXOmEk-6MLQwcOP2j1QqQ 

提取码:0kbl


下载其中的chromedriver_win32.zip和selenium-server-standalone-3.9.1.jar,并解压缩chromedriver_win32.zip后生成的chromedriver_win32.exe和下载的selenium-server-standalone-3.9.1.jar,拷贝至C:\Program Files (x86)\Google\Chrome\Application


(3)启动Selenium的docker服务。


点击开始菜单在最下方的搜索程序和文件的文本框中输入cmd命令,进入命令行模式后执行


cd C:\Program Files (x86)\Google\Chrome\Application


java -Dwebdriver.chrome.driver="chromedriver.exe" -jar selenium-server-standalone-3.9.1.jar


看到有“Selenium Server is up and running on port 4444”的返回字样即说明安装成功。


注意:启动R语言环境之前请一定记得执行此步骤,保证selenium是启动的。


四、调试Selenium浏览器框架


1.启动R语言编程软件,点击开始-所有程序-R-R x64 3.5.2即可启动R语言。


2.进行R语言编程界面后,安装Rselenium包,在R语言环境中执行


1install.packages('RSelenium')


3.安装爬虫包rvest和httr,在R语言环境中执行


1install.packages('rvest')
2install.packages('httr')


4.启动可编程浏览器


在R语言环境中执行


1library(RSelenium)
2library(rvest)
3remDr <- remoteDriver(
4  browserName = "chrome",
5  remoteServerAddr = "localhost",
6  port = 4444L
7
8)
9remDr$open()


这时浏览器会自动打开并且左上角有“chrome正受到自动测试软件的控制”的字样如下图所示。


五、自动信息填写过程的简单样例


1.打开报名网站:咱们前文也提到了,所谓自动报名系统其实就是一个网页爬虫+自动回答的功能实现。以天津幼儿园的报名为例,报名网站平时并不开起,只能通过练习网页进行练习。不过利用练网站简单说一下秒杀流程也是可以的。


在你已经完成了之前的步骤,打开了“chrome正受到自动测试软件的控制”字样的浏览器以后,在R语言环境中运行以后代码。


1url='http://yey.bapuec.org/start'
2
3remDr$navigate(url)


2.进行等待界面:这时浏览器上会显示一个等待界面如下图:



3.输入验证码:然后会让你输入验证码,如下图所示



注:以笔者个人的经验看,填写验证码的步骤,强烈建议使用人工输入的方式进行,使用自动图像识别的验证插件往往欲速而不达。


4.进入正式报名界面



这时返回R语言编程界面运行如下代码。


1xpath='//*[@id="Height_ID"]'
2nextEle=remDr$findElement(using="xpath",value=xpath)
3text <- list('98')
4nextEle$sendKeysToElement(text)
5xpath='//*[@id="Weight_ID"]'
6nextEle=remDr$findElement(using="xpath",value=xpath)
7text <- list('26')
8nextEle$sendKeysToElement(text)
9xpath='//*[@id="CSD_ID"]'
10nextEle=remDr$findElement(using="xpath",value=xpath)
11text <- list('天津市河大区')
12nextEle$sendKeysToElement(text)
13xpath='//*[@id="RM_ID"]'
14nextEle=remDr$findElement(using="xpath",value=xpath)
15text <- list('大晨晨')
16nextEle$sendKeysToElement(text)


接下来你再返回浏览器就会发现神奇的一幕出现了,信息可以按照预先设置好的方式被填上云。


简单讲解一下这些代码的含义:


首先是xpath='//*[@id="Height_ID"]',这其中涉及一定的爬虫知识,这句是要找一下填写”身高“这个文本框对应的html的xpath,然后是nextEle=remDr$findElement(using="xpath",value=xpath),这句是把这个”身高“这个文本框元素选中。


这句定义我的答案text <- list('98')


将你的答案自动填上nextEle$sendKeysToElement(text)


后记:以上是这个自动报名系统的概要说明版本,有一定基础的程序员GG估计按照这个教程做一遍最多不超过半小时,零基础的朋友估计最多也就是需要半天的时间。当然这个版本还没有实现的内容:诸如身份证号以及生日日期等项目的自动填写,而且也没有实现针对提问方式变化而进行的自适应的功能等等。但是整体的思路和基本的搭建过程已经基本说明了。进阶篇我有时间后面也会分享给大家。


原文:

https://blog.csdn.net/BEYONDMA/article/details/87902276


(*本文仅代表作者观点,转载请联系微信1092722531)


公开课推荐


AutoML看起来很美好,却也挑战重重。开发者对 AutoML 也是既好奇也疑惑,所以只要你是 AI 领域的学习者,从业者,甚至感兴趣程序员会不会被 AI 替代这件事,都可以报名学习。你可以在这里从0认识,再次重新认识机器学习新兴且重要的技术领域——AutoML。

推荐阅读:

你点的每个“在看”,我都认真当成了喜欢

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存