webMagic获取cookie登陆
程序员文章站
2022-05-02 22:12:41
...
想要爬取的网站需要登录时,可以用Selenium模拟浏览器登陆,获取cookie,设置到webMagic的site中。
使用selenium,配置maven依赖
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.48.0</version>
</dependency>
注意:selenium 3.0以上版本需要java8。
模拟浏览器登陆,需要浏览器驱动,我使用的是Chrome,驱动Chromedriver下载地址:http://chromedriver.storage.googleapis.com/index.html。
注意Chromedriver和Chrome对应版本。
下载之后配置Chromedriver的环境变量,不配置也可以在代码里注册驱动。
System.setProperty("webdriver.chrome.driver",
"D:/chromedriver/chromedriver.exe"); // 注册驱动
然后打开浏览器,设置用户名,密码进行登陆。
完整代码
package us.codecraft.webmagic.processor.example;
import java.util.Set;
import org.openqa.selenium.By;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;
public class WebMagic implements PageProcessor {
private Site site = Site
.me()
.setRetryTimes(3)
.setSleepTime(1000)
.setTimeOut(10000)
.addHeader("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3")
.addHeader("Connection", "keep-alive")
.addHeader("X-Requested-With", "XMLHttpRequest")
.addHeader("Content-Type",
"application/x-www-form-urlencoded;charset=utf-8")
.addHeader(
"User-Agent",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36");
// 用来存储cookie信息
private Set<Cookie> cookies;
@Override
public void process(Page page) {
// 抓取规则
}
@Override
public Site getSite() {
// 将获取到的cookie信息添加到webmagic中
for (Cookie cookie : cookies) {
site.addCookie(cookie.getName().toString(), cookie.getValue()
.toString());
}
return site;
}
public void login() {
// 登陆
System.setProperty("webdriver.chrome.driver",
"D:/chromedriver/chromedriver.exe"); // 注册驱动
WebDriver driver = new ChromeDriver();
driver.get("");// 打开网址
// 防止页面未能及时加载出来而设置一段时间延迟
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 设置用户名密码
driver.findElement(By.id("username")).sendKeys("用户名"); // 用户名
driver.findElement(By.id("password")).sendKeys("密码"); // 密码
// 模拟点击
driver.findElement(By.xpath("//form[@id='form-group-login']/button"))
.click(); // xpath语言:id为form-group-login的form下的button
// 防止页面未能及时加载出来而设置一段时间延迟
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 获取cookie信息
cookies = driver.manage().getCookies();
driver.close();
}
public static void main(String[] args) {
String url = ""; // 地址
WebMagic dome = new WebMagic();
dome.login(); // 登陆
Spider.create(dome).addUrl(url).thread(5).start();
}
}
参考:https://blog.csdn.net/qixinbruce/article/details/71105444
参考:https://blog.csdn.net/LEoe_/article/details/72934365