java爬虫抓取网页数据(使用Java爬虫爬取公众号页面图片使用和HttpClient实现)

优采云 发布时间: 2021-10-04 06:22

  java爬虫抓取网页数据(使用Java爬虫爬取公众号页面图片使用和HttpClient实现)

  使用Java爬虫抓取人民日报公众号页面图片

  使用Java框架Jsoup和HttpClient实现,先看代码

  抓取目标页面

  1、使用Maven构建一个普通的Java项目

  添加依赖:

  

org.jsoup

jsoup

1.11.2

org.apache.httpcomponents

httpclient

4.3.1

  2、第一堂课,开始爬取入门类

  package com.yomihu.spider;

import com.yomihu.parse.ParseHtml;

import org.apache.http.client.methods.CloseableHttpResponse;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClients;

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

import java.io.File;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.util.ArrayList;

import java.util.List;

/**

* mini-spider 单页面爬取启动类

*

* @Author 孙龙

* @Date 2018/1/28

*/

public class SinglePageSpiderStarter {

/**

* 开始页面的URL(一个微信公众号的页面)

*/

private static final String START_URL = "https://mp.weixin.qq.com/s/zzkEWbcb81pbsr-PJvVzQA";

/**

* 目标图片存放目录

*/

private static final String IMG_SAVE_PATH = "E:/jj";

public static void main(String[] args) throws Exception {

//使用Jsoup将目标Url的Html页面获取为Document变量

Document rootdocument = Jsoup.connect(START_URL).get();

List urlList = new ArrayList();

//将页面中的目标Url解析为列表

ParseHtml.singlePageParseImg(rootdocument, urlList);

//初始化HttpClient对象

CloseableHttpClient httpClient = HttpClients.createDefault();

//控制图片名称的变量

int i = 0;

for (String url : urlList) {

HttpGet httpGet = new HttpGet(url);

CloseableHttpResponse response = httpClient.execute(httpGet);

InputStream inputStream = response.getEntity().getContent();

//保存图片

File file = new File(IMG_SAVE_PATH);

if (!file.exists()) {

//不存在就创建该目录

file.mkdirs();

}

String imgName = IMG_SAVE_PATH + File.separator + "test" + i + ".jpg";

//保存图片

FileOutputStream fos = new FileOutputStream(imgName);

i++;

byte[] data = new byte[1024];

int len;

while ((len = inputStream.read(data)) != -1) {

fos.write(data, 0, len);

}

//释放资源

response.close();

}

httpClient.close();

}

}

  3、 第二类,解析Html页面

  package com.yomihu.parse;

import org.jsoup.nodes.Document;

import org.jsoup.nodes.Element;

import org.jsoup.select.Elements;

import java.io.IOException;

import java.util.List;

/**

* mini-spider Html页面结构解析

*

* @Author 孙龙

* @Date 2018/1/28

*/

public class ParseHtml {

/**

* 微信单页面结构解析,这里我们只要将页面中的图片对应的URL取出

* (方法中的解析逻辑是根据分析页面结构和各元素的特征来解析的)

*

* @param document

* @param urls

*/

public static void singlePageParseImg(Document document, List urls) {

Elements divElements = document.select("[class=rich_media_content]");

Elements pElements = divElements.select("p");

Elements imgElements = pElements.select("img");

for (Element imgElement : imgElements) {

urls.add(imgElement.attr("data-src"));

//打印目标数据,查看是否正确

}

Elements spanElements = pElements.select("span");

Elements imgElemnets = spanElements.select("img");

for (Element imgElement : imgElemnets) {

urls.add(imgElement.attr("data-src"));

//打印目标数据,查看是否正确

System.out.println(imgElement.attr("data-src"));

}

}

}

  4、在第一个类中启动main函数

  检查我们抓取的目标图片是否已经存在于目录中。

  总结

  其实爬虫不难写。首先,我们首先要知道什么是爬虫。爬虫是用程序模拟浏览器不断连接获取分析并保存页面数据;这里我只是使用Apache成熟的开源框架进行开发,实现了简单的单页爬取,同样多页循环爬取Fetching需要在程序中不断迭代,不断更新爬取目标;即程序在解析页面时,将下一个目标页面的Url保存在待爬取的列表中。

  爬虫不难实现。难的是分析目标页面,找到页面元素之间的规律,定期分析页面,得到我们想要的数据;当然,更难的是服务器上的一些大网站反爬虫机制。

  下面我来实现一个多页面循环爬取的demo

  示例代码

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线