webMagic与chromedriver
在使⽤爬⾍的过程中,有的⽹站的信息必须是要登录后才能查看,除了添加cookie之外还可以在程序中启动浏览器在并在相应的位置填好⽤户名和密码等信息进⾏登录后,再将session信息存⼊。
1.起因
当使⽤webMagic爬取需要登录的⽹站信息时,有的时候请求包含的cookie信息过长,在不确定使⽤哪个时就需要调⽤n多次site中的addCookie ⽅法,来来回回复制和粘贴cookie信息就很⿇烦。所以就想着有没有⼀种更⽅便的⽅法可以获取到cookie的信息然后⾃动添加。接着查询资料就发现了⼀个⽅案,就是利⽤浏览器的驱动实现⽤户登录,可以获取到页⾯的cookie信息。
2.步骤
⾸先百度了⼀下,然后了解到webmagic中有相关的⼯具可以模拟登陆,所以只需要在项⽬中引⼊jar包就可以了。
第⼀步,在maven中引⼊webmagic对Selenium的jar包
</dependency>
<dependency>
<groupId&decraft</groupId>
<artifactId>webmagic-selenium</artifactId>
<version>0.5.2</version>
</dependency>
然后,运⾏时发现程序时报错了,了解到还需要安装⼀个浏览器驱动,所以第⼆步就是安装驱动。
mac 下安装⾕歌浏览器驱动的命令selenium获取cookie
brew install chromedriver
这样前期⼯作就准备好了
3.运⾏
在爬⾍启动之前先要加⼊⼀段登录的过程,代码如下,此处url为⾖瓣的地址
public void login(String url)
{
System.setProperty("webdriver.chrome.driver","/usr/local/Cellar/chromedriver/2.33/bin/chromedriver");
WebDriver driver = new ChromeDriver();
<(url);
driver.findElement(By.id("form_email")).clear();
//将userName替换为你的⽤户名
driver.findElement(By.id("form_email")).sendKeys("userName");
driver.findElement(By.id("form_password")).clear();
//将password替换为你的密码
driver.findElement(By.id("form_password")).sendKeys("password");
/
/模拟点击登录按钮
driver.findElement(By.className("bn-submit")).click();
//获取cookie信息
cookies = driver.manage().getCookies();
driver.close();
}
然后将session保存在cookie中
public Site getSite() {
for (Cookie cookie : cookies) {
site.Name().toString(),Value().toString());
}
return site.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko)
Chrome/22.0.1207.1 Safari/537.1");
}
然后在进⾏正常的抓取流程就好了。
4.问题
在进⾏模拟登陆时,很多情况下会遇到各种验证码的问题,有的是滑动验证、验证码验证,图⽚点击认证等等。因为有些涉及到图形处理⽅⾯的知识,就没有继续研究,加上⼯作上暂时也没遇到过需要爬⼀些需要登录并且登录前需验证的页⾯,所以这⽅⾯的学习就先到这⾥,其实关于selenium还有很多需要学习的地⽅,这⾥也只是介绍了与chromedriver⼀起使⽤模拟登陆的⽤途,以后路还很长,需要学习的地⽅还有很多。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论