什么是爬虫:
网络爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。
简单地说,就是一个按照你的需求,会自动抓取网络信息的程序或脚本,不用认为去处理那么多数据,而学会爬虫后,可以做:
- 搜索引擎,采集的信息进行检索,实现私人搜索引擎。
- 大数据时代,获取更多数据源,满足自己的需求。
- 搜索引擎优化等,这个功能很少用。
本次爬虫的环境要求:1. JDK1.8 2. IDEA 3. IDEA自带Maven。
主要技术:
httpclient:发起网络请求,抓取页面。
jsoup:解析页面、获取信息。(jsoup也可以发起网络请求,但是多线程、连接池支持不好,所以拿来用解析工具)
主要步骤:用httpclient抓取html页面,然后把抓取的页面jsoup解析并用selector 选择器,接着解析后获取自己需要的信息,并存进数据库。
这里是抓取某东为例:
在maven的pom.xml加入依赖:
<!-- HttpClient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
</dependency>
<!-- 日志 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
我们写一个test类,用带参数的Get方法,抓一下电脑类的页面,并打印数量:
package test;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
public class HttpGetParamTest {
public static void main(String[] args) throws Exception{
// //创建HttpClient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
//发起请求地址,创建URIBuilder
URIBuilder uriBuilder = new URIBuilder("https://www.jd.com/search");
//设置参数
uriBuilder.setParameter("keyword","电脑");
//创建HttpGet请求
HttpGet httpGet = new HttpGet( uriBuilder.build() );
System.out.println("发起请求地址"+httpGet);
CloseableHttpResponse response = null;
try {
//使用HttpClient发起请求
response = httpClient.execute(httpGet);
//判断响应状态码是否为200
if (response.getStatusLine().getStatusCode() == 200) {
//如果为200表示请求成功,获取返回数据
String content = EntityUtils.toString(response.getEntity(), "UTF-8");
//打印数据长度
System.out.println(content.length());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
response.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
效果如图:
抓取成功。为什么可以抓到电脑页面?因为对应参数keyword=“电脑”就可以了,下图所示:
后文待更新…