使用技术
Java
selenium
Chrome
技术解析:
使用Java作为开发语言,selenium作为主要爬虫框架
开发准备
IDEA
Chrome
JDK 8
Maven3.3+
新建Maven项目
新建简单的Maven项目
下载驱动
自行下载 chromedriver.exe
放入项目跟目录
引入jar包
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.9.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.10.0</version>
</dependency>
</dependencies>
开始编写
创建BrowserUtils.java文件,用于创建浏览器
/**
* 打开谷歌浏览器.
*
* @return 返回浏览器
*/
public static WebDriver getInstanceByChrome() {
try {
String driverDirectory = "chromedriver.exe";
ChromeDriverService src = new ChromeDriverService.Builder()
.usingDriverExecutable(new File(driverDirectory)).usingAnyFreePort().build();
src.start();
ChromeOptions options = new ChromeOptions();
ChromeDriver driver = new ChromeDriver(src, options);
driver.manage().window().maximize();
return driver;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
创建BasicHandler.java,用户存储当前任务的url
public abstract class BasicHandler {
private String url;
public BasicHandler(String url) {
this.url = url;
}
public String getUrl() {
return url;
}
}
创建MainHandler用于执行任务
public class MainHandler extends BasicHandler {
public MainHandler(String url) {
super(url);
}
public List<Task> getTask() throws Exception {
//todo 爬取代码
}
}
创建Task类,用于存储下一步需要爬去的任务
public class Task {
private String url;
private String title;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
编写爬虫代码
观察以上图片
可以看到css:item clearfix修饰着所有问题,形成一个列表,需要抓取该css修饰的元素,即可获得整个列表
然后在该元素下,抓取css :que-title,标签的href,text即可抓取到一个问题的标题和链接
实现
在MainHandler,getTask()中加入代码
WebDriver webDriver = BrowserUtils.getInstanceByChrome();
if (null == webDriver) {
throw new Exception("浏览器打开失败");
}
webDriver.get(super.getUrl());
List<WebElement> listElement = webDriver.findElements(By.cssSelector(".item.clearfix"));
List<Task> tasks = new ArrayList<Task>(listElement.size());
for (WebElement webElement : listElement) {
WebElement titleElement = webElement.findElement(By.className("que-title"));
String title = titleElement.getText();
String url = titleElement.getAttribute("href");
Task task = new Task();
task.setTitle(title);
task.setUrl(url);
tasks.add(task);
}
return tasks;
打开浏览器
打开一个链接
查找该链接下css为’ques-list’的元素列表
遍历列表,获取元素下的title,href
编写Application.main方法
public static void main(String args[]) throws Exception {
List<Task> data = new MainHandler("https://www.imooc.com/wenda").getTask();
data.forEach(d -> {
System.out.println("title:" + d.getTitle() + " url:" + d.getUrl());
});
}
运行main方法,即可看到爬去的title,和url
点击查看更多内容
9人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦