java网络爬虫如何实现

八爪鱼·云采集网络爬虫软件

www.bazhuayu.com

public class HttpClientTest {

public static void main(String[] args) throws URISyntaxException, IOException {

String url = \; //请求路径

//构造路径参数

List nameValuePairList = Lists.newArrayList();

nameValuePairList.add(new

BasicNameValuePair(\,\)); nameValuePairList.add(new

BasicNameValuePair(\,\));

//构造请求路径,并添加参数 URI uri = new

URIBuilder(url).addParameters(nameValuePairList).build();

//构造Headers

List

headerList = Lists.newArrayList(); headerList.add(new

BasicHeader(HttpHeaders.ACCEPT_ENCODING,\)); headerList.add(new BasicHeader(HttpHeaders.CONNECTION, \));

八爪鱼·云采集网络爬虫软件

www.bazhuayu.com

//构造HttpClient

HttpClient httpClient =

HttpClients.custom().setDefaultHeaders(headerList).build();

//构造HttpGet请求

HttpUriRequest httpUriRequest =

RequestBuilder.get().setUri(uri).build();

//获取结果

HttpResponse httpResponse =

httpClient.execute(httpUriRequest);

//获取返回结果中的实体

HttpEntity entity = httpResponse.getEntity();

//查看页面内容结果

String rawHTMLContent = EntityUtils.toString(entity);

System.out.println(rawHTMLContent);

//关闭HttpEntity流

EntityUtils.consume(entity); } }

这种方式可以使我们一次性构造一个统一头部的HttpClient,后面所有的请求都可以使用带有这个Headers的HttpClient。非常简单方便。 3、将下载的网页解析,转换成结构化数据

上一个步骤介绍获取了 http://www.datalearner.com/blog_list 页面的HTML源码,但是这些源码是提供给浏览器解析用的,我们需要的数据其实是页面上博客的标题、作者、简介、发布日期等。我们需要通过一种方式来从HTML源码中解析出

八爪鱼·云采集网络爬虫软件

www.bazhuayu.com

这类信息并提取,然后存到文本或者数据库之中。在这篇博客中,我们将介绍使用Jsoup包帮助我们解析页面,提取数据。

Jsoup是一款Java的HTML解析器,可以直接解析某个URL地址,也可以解析HTML内容。其主要的功能包括解析HTML页面,通过DOM或者CSS选择器来查找、提取数据,可以更改HTML内容。Jsoup的使用方式也很简单,使用Jsoup.parse(String str)方法将之前我们获取到的HTML内容进行解析得到一个Documend类,剩下的工作就是从Document中选择我们需要的数据了。举个例子,假设我们有个HTML页面的内容如下:

通过Jsoup我们可以把上面的三篇博客的标题提取到一个List中。使用方法如下: 首先,我们通过maven把Jsoup引入进来

org.jsoup jsoup

1.10.3 然后编写Java进行解析。

八爪鱼·云采集网络爬虫软件

www.bazhuayu.com

package org.hfutec.example;

import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.select.Elements; import java.util.ArrayList;import java.util.List; /*******

* created by DuFei at 2017.08.25 21:00 * web crawler example * ******/

public class DataLearnerCrawler {

public static void main(String[] args) {

List titles = new ArrayList(); List urls = new ArrayList();

//假设我们获取的HTML的字符内容如下

String html = \

class=\\\第一篇博客

\;

//第一步,将字符内容解析成一个Document类 Document doc = Jsoup.parse(html);

//第二步,根据我们需要得到的标签,选择提取相应标签的内容 Elements elements =

doc.select(\).select(\);

八爪鱼·云采集网络爬虫软件

www.bazhuayu.com

for( Element element : elements ){ String title = element.text(); titles.add(title);

urls.add(element.select(\).attr(\)); }

//输出测试

for( String title : titles ){ System.out.println(title); }

for( String url : urls ){ System.out.println(url); } } }

我们简单说明一下Jsoup的解析过程。首先第一步都是调用parse()方法将字符对象变成一个Document对象,然后我们对这个对象进行操作。一般提取数据就是根据标签选择数据,使用select()方法语法格式和 javascript/css 选择器都是一样的。一般都是提取某个标签,其属性值为指定内容。得到的结果是一个Element的集合,为Elements(因为符合条件的标签可能很多,所以结果是一个集合)。select()方法可以一直进行下去,直到选择到我们想要的标签集合为止(注意,我们并不一定要按照标签层级一级一级往下选,可以直接写select()方法到我们需要的标签的上一级,比如这里的示例代码可以直接写成 Elements elements = doc.select(“div[class=blog_title]”); 其效果是一样的)。对于选择到的Elements的集合,我们可以通过循环的方式提取每一个需要的数据,比如,我们需要拿到标签的文本信息,就可以使用text()方法,如果我们需要拿到对应的HTML属性信息,我们可以使用attr()方法。我们可以看到上述方法的输出结果如下:

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4