首先基本的爬虫开发,一般涉及到抓包工具的使用,比如抓取一下带有请求参数的链接,需要知道参数的字段名称等,每个字段是否加密,现在介绍一个简单的例子,抓取百度新闻。
1 下载页面(使用jdk自带的下载工具包)
/**
* 给定一个链接地址进行下载
* @param link
* @return
*/
public String down(String link) throws Exception{
//常见url对象
URL url = new URL(link);
//链接服务端
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
//设置一些参数
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-Type","text/html");
//握手
conn.connect();
//获取返回的结果流
InputStream is = conn.getInputStream();
//获取返回回来的网页内容
InputStreamReader isr = new InputStreamReader(is,CHARSET);
BufferedReader reader = new BufferedReader(isr);
StringBuffer buffer = new StringBuffer();
//遍历输入流,将网页源码写入到buffer中
reader.lines().forEach(new Consumer<String>() {
@Override
public void accept(String s) {
buffer.append(s);
}
});
return buffer.toString();
}
2 针对下载到的网页进行解析
解析使用的是正则抽取,代码如下:
/**
* 解析
* @param html
* @return
*/
public void parse(String html){
//抽取a标签的正则
String regex = "<a.*?</a>";
//抽取数据
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(html);
//遍历
while(matcher.find()){
String atag = matcher.group();
//url
String url = getUrl(atag);
//title
String title = atag.replaceAll("<.*?>","");
//打印数据
System.out.println(url + "\t" + title);
}
}
/**
*
* @param atag
* @return
*/
public String getUrl(String atag){
//抽取a标签的正则
String regex = "(?:href=\")(.*?)(?:\")";
//抽取数据
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(atag);
if(matcher.find())return matcher.group(1);
return null;
}
下載百度新聞首頁,并解析其中的超連接和對應的文本內容執行結果如下:
上面这个就是爬虫的一个简单的抓取过程,爬虫一共应该分3个阶段:
1 下载
2 解析
3 存储
上面主要介绍了下载和解析的过程,上面这个解析好的是超链接,对于我们来说没有任何用处,我们想看的是新闻正文的内容,因此只要将这些链接放入到缓存中,在依次取出经过上面的过程在进行下载解析。下载到的页面就是正文内容了,具体的过程和代码看下一节博客。