说明:
最近对爬虫感兴趣了,所以就私下里做了个爬虫来玩,所以在这里简单记录一下开发过程,希望能对感兴趣的小伙伴们有用。如有不足,请给予建议。
目标:
某联(https://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&sm=0&p=1)
至于为什么选择这个网站呢?为什么不选某宝、某东呢?
其实很简单,因为现在有很多大型网站都有反爬虫策略,对于新手来说,如果不清楚如何破解这些反爬虫策略就会轻易的上这些网站的黑名单,导致很多人都懵逼了。还有一个原因就是简单了。
技术选型:
java+HttpClient+Jsoup+redis;
原理分析:
如果之前有了解过爬虫的同学就会发现,现在其实有很多成型的爬虫框架,例如WebCollector,Webmagic,甚至python的scrapy都是相当之经典,顺便给大家简单介绍一下scrapy的设计原理。
引擎(Engine): 用来处理整个系统的数据流处理, 触发事务(框架核心)
调度器(Scheduler): 用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
下载器(Downloader): 用于下载网页内容, 并将网页内容返回给调度器
爬虫(Spiders): 爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。 用户也可以从中提取出链接,让框架继续抓取下一个页面
项目管道(Pipeline): 负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。 当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。
详见:https://www.wjx.top/jq/23149027.aspx
在这里我就简化一下,就俩操作:下载+解析。
代码区:
需要引入的jar包:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.2</version>
</dependency>
一、下载页面信息:
经过研究发现页面中的基本信息都由这个链接请求而来
下载页面的方法有很多但究其根源都是一样的,今天先介绍一种:
String url ="https://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&sm=0&p=1";
Document pagedocument = Jsoup.connect(url).get();
System.out.println(pagedocument.toString());
控制台打印出来发现,这基本跟浏览器中看到一样。
虽然上面的也能获取页面信息,但是我建议还是在链接中添加请求信息,模拟浏览器访问,以防止被反爬虫策略给加入黑名单
Document pagedocument = Jsoup.connect(url)
.header("Host", "www.lagou.com")
.userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)"
+ " Chrome/65.0.3298.4 Safari/537.36").get();
二、解析页面信息:
解析页面的方法也有很多,例如HtmlPaser,Xpath,Jsoup….
我采用的是jsoup:
先观察页面的结构:
//获取列表中的详情url
Element tableList = doc.getElementById("newlist_list_content_table");
//获取超链接 a href 标签
Elements hrefLists = tableList.select("table>tbody>tr>td>div>a");
//循环获取href链接,如果链接不为空,则放入低级队列
Iterator<Element> iterator = hrefLists.iterator();
while(iterator.hasNext()){
Element next = iterator.next();
}
其实我刚开始学习的时候用的没事Xpath,但是后来发现不同的浏览器获取的Xpath不一样,而且还不稳定,有时候能解析出来,有时候就解析不出来,搞的我一阵头大。后来就果断放弃Xpath,采用Jsoup。有现成的框架,为啥不用呢
到此爬虫的页面下载和解析已经介绍完毕,随后会继续更新java爬虫。
下一步,将做url管理器,从列表到详情页面的纵向爬取。