Java爬虫需要的库
主要是Jsoup和OKHTTP,
具体的依赖如下:
<!-- 为了利用httpclient访问url,爬虫用-->
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.8.3</version>
</dependency>
<!-- 文件下载 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.5</version>
</dependency>
其中jsoup主要是实现爬虫页面解析,okhttp用来做数据请求获取页面信息
工具类文件地址(我的码云仓库):
https://gitee.com/stephaniezhang/java-tool-library-functions/tree/master/java%E7%88%AC%E8%99%AB%E5%B7%A5%E5%85%B7%E7%B1%BB
Jsoup页面解析注意
本身Jsoup提供了很多的条件筛选接口,比如按class筛选,按attr筛选等,但是我发现不知道是自己使用不准确还是功能不稳定,很多时候按class指定查找元素等很不好用,所以我就会后来一律使用:
Element parents; Elements childs = parents.getAllElements();
大量使用getAllElements()这个函数,然后从找出的childs中继续筛选想要的hml元素,比如判断child.html()是否包含某个特征样式串等,找到想要的节点
使用代理服务器提高成功率
我目前主要使用的两个代理服务器:
但是因为服务器上的代理IP是会不停更新或失效的(每天),所以需要动态的从这些代理服务器上获取最新的代理IP端口,在程序执行爬虫操作的时候,一旦发现哪个IP不可用就丢弃他,以便保证我们程序使用的代理永远是新的更有效的
国内透明免费HTTP代理IP - 快代理
国内最新免费HTTP代理IP平台 - 蜜蜂代理
浏览器爬虫插件WebScrapper
个别时候,我们有可能需要临时批量采集一些网页数据,直接开发程序耗费的成本可能比较高,就可以考虑用浏览器爬虫插件,我最近用了一个WebScrapper,Chrome和Edge都有都可以用的
注意要点
(1) 爬虫为了提高访问成功率,除了基础的获取页面请求,还可能需要修饰一下请求Header,以及cookie一些数据
(2)避免被服务器封禁号,可能需要切不同的IP进行尝试,即处理一下代理IP,做成维护动态的代理IP后重试
|