java爬虫抓取网页数据(java实现了一个简单的网页数据)

优采云 发布时间: 2021-12-08 04:18

  java爬虫抓取网页数据(java实现了一个简单的网页数据)

  最近用java实现了一个简单的网页数据抓取。下面是实现原理和实现代码:

  原理:使用如下URL对象获取链接,下载目标网页的源码,使用jsoup解析源码中的数据,得到想要的内容

  1.首先根据网址下载源码:

  /**

* 根据网址和编码下载源代码

* @param url 目标网址

* @param encoding 编码

* @return

*/

public static String getHtmlResourceByURL(String url,String encoding){

//存储源代码容器

StringBuffer buffer = new StringBuffer();

URL urlObj = null;

URLConnection uc = null;

InputStreamReader isr = null;

BufferedReader br =null;

try {

//建立网络连接

urlObj = new URL(url);

//打开网络连接

uc = urlObj.openConnection();

//建立文件输入流

isr = new InputStreamReader(uc.getInputStream(),encoding);

InputStream is = uc.getInputStream();

//建立文件缓冲写入流

br = new BufferedReader(isr);

FileOutputStream fos = new FileOutputStream("F:\\java-study\\downImg\\index.txt");

//建立临时变量

String temp = null;

while((temp = br.readLine()) != null){

buffer.append(temp + "\n");

}

// fos.write(buffer.toString().getBytes());

// fos.close();

} catch (MalformedURLException e) {

e.printStackTrace();

System.out.println("网络不给力,请检查网络设置。。。。");

}catch (IOException e){

e.printStackTrace();

System.out.println("你的网络连接打开失败,请稍后重新尝试!");

}finally {

try {

isr.close();

} catch (IOException e) {

e.printStackTrace();

}

}

return buffer.toString();

}

  2.根据下载的源码分析数据得到你想要的内容,这里我拿图,你也可以在贴吧中得到邮箱、电话等

  /**

* 获取图片路劲

* @param url 网络路径

* @param encoding 编码

*/

public static void downImg(String url,String encoding){

String resourceByURL = getHtmlResourceByURL(url, encoding);

//2.解析源代码,根据网络图像地址,下载到服务器

Document document = Jsoup.parse(resourceByURL);

//获取页面中所有的图片标签

Elements elements = document.getElementsByTag("img");

for(Element element:elements){

//获取图像地址

String src = element.attr("src");

//包含http开头

if (src.startsWith("http") && src.indexOf("jpg") != -1) {

getImg(src, "F:\\java-study\\downImg");

}

}

}

  3. 根据获取到的图片路径下载图片,这里我下载的是携程网的内容

  /**

* 下载图片

* @param imgUrl 图片地址

* @param filePath 存储路劲

*

*/

public static void getImg(String imgUrl,String filePath){

String fileName = imgUrl.substring(imgUrl.lastIndexOf("/"));

try {

//创建目录

File files = new File(filePath);

if (!files.exists()) {

files.mkdirs();

}

//获取地址

URL url = new URL(imgUrl);

//打开连接

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

//获取输入流

InputStream is = connection.getInputStream();

File file = new File(filePath + fileName);

//建立问价输入流

FileOutputStream fos = new FileOutputStream(file);

int temp = 0;

while((temp = is.read()) != -1){

fos.write(temp);

}

is.close();

fos.close();

} catch (Exception e) {

e.printStackTrace();

}

}

  最后是调用过程

  public static void main(String[] args) {

//1.根据网址和页面编码集获取网页源代码

String encoding = "gbk";

String url = "http://vacations.ctrip.com/";

//2.解析源代码,根据网络图像地址,下载到服务器

downImg(url, encoding);

}

  总结:根据上面实现的简单数据爬取,存在一些问题。我爬的旅游页面有很多图片。根据img属性,我在src里面拿到了下载图片的地址,但是页面图片很多。结果但是我只能爬到一小部分,如下图:

  

  我把下载的源代码写成文件,和原来的网页对比。基本上,没有页面浏览的图片,也没有在源代码中。不知道为什么,求网友解答。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线