涉及的技术点:SpringBoot框架、Web Magic爬⾍框架、MySQL、mybatis。
使用语言:Java。
使用工具:idea。
本篇文章主要讲解搭建项目 以及 如何将页面数据输出打印到idea后台上。暂不涉及数据库。(下篇文章涉及到会继续更新…)
目录
4、创建一个spider包,创建爬虫信息类SXSProcessor.java
6、在Spider中点击按钮启动项目,在浏览器中输入localhost:8080/spider,回车运行,页面出现success字符串,说明已启动爬取页面,返回idea中查看打印台上是否有响应的数据。
1、创建项目
2、maven中导入依赖pom.xml
首先引入依赖,parent,里面包含了大量的默认配置,大大简化了开发
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
</parent>
<dependencies>中引入需要的依赖 :
<!---springboot依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mybatis依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
</dependency>
<!-- webmagic爬虫依赖 -->
<dependency>
<groupId>us.codecraft</groupId>
<artifactId>webmagic-core</artifactId>
<version>0.7.3</version>
</dependency>
<dependency>
<groupId>us.codecraft</groupId>
<artifactId>webmagic-extension</artifactId>
<version>0.7.3</version>
</dependency>
3、修改启动类名称
将启动类名修改为SpiderApplication,里面的具体信息如下:
@SpringBootApplication
public class SpiderApplication {
public static void main(String[] args) {
SpringApplication.run(SpiderApplication.class, args);
System.out.println("爬虫项目");
}
}
4、创建一个spider包,创建爬虫信息类SXSProcessor.java
这个类需要实现PageProcessor接口,实现其中的两个方法,分别是
public void process(Page page) {}//处理爬虫页面的所有信息,解析html的业务代码都放在这个方法中public Site getSite() {return site;}//返回出一个实例对象
以爬取某实习网站中得数据为例。
分析一下整个页面,现在需要将这些招聘信息的主要内容筛(岗位名称,薪资情况等)选出来打印到控制台上。需要你会分析html页面,知道如何定位页面元素
直接贴出代码,注解都比较详细,需要的可以仔细研究研究。
/**
* 爬取某实习网页页面
*/
@Service("sxsProcessor")
public class SXSProcessor implements PageProcessor {
//给定要爬取的网址 这块审核过不了
static String URL = "";
//获取site实例 setRetryTimes(3)重试3次 setCharset("utf-8")字符集编码为utf-8 setSleepTime(new Random().nextInt(20) * 100)页面等待,时间随机在0-2s之内
private Site site = Site.me().setRetryTimes(3).setCharset("utf-8").setSleepTime(new Random().nextInt(20) * 100);
//输出URL
public static String getURL() {
return URL;
}
@Override
//爬取页面解析位置
public void process(Page page) {
//解析当前所在页面
String url = page.getUrl().get();
Integer num = Integer.valueOf(url.substring(url.indexOf("page=") + 5, url.indexOf("&")));
System.out.println("当前页数:" + num);
//获取页面的全部代码,开始调试时可以打开这块,查看能否爬取到页面的代码
// String s1 = page.getHtml().get();
//System.out.println(s1);
//爬取招聘页面解析
//根据需要提取的html页面分析,得到想要的信息的xpath(这里需要你会在浏览器页面中会定位元素)
//这个list中存储的就是每个招聘信息的内容,然后遍历信息,在这些信息中找自己想要的数据,得到xpath,获取到信息
List<Selectable> node = page.getHtml().xpath("//div[@class=\"intern-wrap intern-item\"]").nodes();
for (Selectable s : node) {
//解析薪资
String money = s.xpath("//div[@class=\"f-l intern-detail__job\"]/p/span/text()").get().trim();
System.out.println(money);
//获取公司地点
String address = s.xpath("//div[@class=\"f-l intern-detail__job\"]/p[2]/span/text()").get();
System.out.println(address);
//获取公司名
String companyName = s.xpath("//div[@class=\"f-r intern-detail__company\"]/p/a/text()").get();
System.out.println(companyName);
System.out.println();
System.out.println();
}
//System.out.println("URL:" + url);
//停止爬虫 假设页面大于5页,就停止爬取
if (num > 5) {
return;
}
//翻下一页面,改变url中page的值
num = num + 1;
url = url.replace(url.substring(url.indexOf("page="), url.indexOf("&")),
"page=" + String.valueOf(num));
//翻页
page.addTargetRequest(url);
}
@Override
//获取实例
public Site getSite() {
return site;
}
}
5、给定Controller层一个类,来触发爬取页面的启动
@Controller
public class SpiderController {
@Autowired
private SXSProcessor sxsProcessor;
@RequestMapping("/spider")
@ResponseBody
public String spider(){
Spider.create(sxsProcessor).addUrl(SXSProcessor.getURL()).run();
System.out.println("开始爬取工作信息啦");
return "sucess";
}
}
6、在Spider中点击按钮启动项目,在浏览器中输入localhost:8080/spider,回车运行,页面出现success字符串,说明已启动爬取页面,返回idea中查看打印台上是否有响应的数据。
idea中控制台显示结果: