这个java获取网络资源以前也写过不少

最近用到又重新写了一个,apache.commons.io中的例子就非常好,但是无法对请求进行详细设置

于是大部分照搬,局部替换以设置请求头

如需更加复杂的设置,可以考虑使用同为apche的httpComponents


**
```java
package boot.example;

import org.apache.commons.io.FileUtils;

import org.apache.commons.io.IOUtils;

import java.io.*;

import java.net.HttpURLConnection;

import java.net.URL;

/**

  • Created by wq on 2017/6/6.

    */

    public class Download {

    public static void main(String[] args) {

    Download download = new Download();

    String url = "http://img1.3lian.com/2015/w7/85/d/21.jpg";

    String path1 = "E:\1.jpg";

    String path2 = "E:\2.jpg";

    String path3 = "E:\3.jpg";

    String url2="http://www.baidu.com";

    try {

    download.apacheCommonsIoDownload(url, path1);

    } catch (Exception e) {

    e.printStackTrace();

    }

    try {

    download.pureJavaNetDownload(url, path2);

    } catch (Exception e) {

    e.printStackTrace();

    }

    try {

    download.mixedDownload(url, path3);

    } catch (Exception e) {

    e.printStackTrace();

    }

    try{

    download.getContentAsString(url2);

    }catch (Exception e){

    e.printStackTrace();

    }

    }

    private void apacheCommonsIoDownload(String urlstr, String path) throws Exception {

    apacheCommonsIoDownload(urlstr, new File(path));

    }

    private void apacheCommonsIoDownload(String urlstr, File file) throws Exception {

    FileUtils.copyURLToFile(new URL(urlstr), file);

    }

    private void pureJavaNetDownload(String urlstr, String path) throws Exception {

    pureJavaNetDownload(urlstr, new File(path));

    }

    //无需依赖

    private void pureJavaNetDownload(String urlstr, File file) throws Exception {

    URL url = new URL(urlstr);

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

    httpURLConnection.setRequestMethod("GET");

    //有的网站屏蔽程序抓取 添加User-Agent头信息以避免403

    httpURLConnection.setRequestProperty("User-Agent", "Mozilla/4.0");

    httpURLConnection.setConnectTimeout(10000);

    httpURLConnection.setReadTimeout(10000);

    // httpURLConnection.set...更多请求设置

    httpURLConnection.connect();

    InputStream is = httpURLConnection.getInputStream();

    // 不需要设置可以直接下面 也就是org.apache.commons.io.FileUtils中copyURLToFile(URL source, File destination)的写法

    // InputStream is=url.openStream();

    try {

    FileOutputStream fos = new FileOutputStream(file);

    try {

    // 照搬org.apache.commons.io.IOUtils

    // IOUtils.copy(InputStream input, OutputStream output) 开始

    byte[] buffer = new byte[1024 * 4];

    int n;

    while (-1 != (n = is.read(buffer))) {

    fos.write(buffer, 0, n);

    }

    // IOUtils.copy(InputStream input, OutputStream output) 结束

    } finally {

    try {

    if (is != null) {

    fos.close();

    }

    } catch (IOException ioe) {

    // ignore

    }

    }

    } finally {

    try {

    if (is != null) {

    is.close();

    }

    } catch (IOException ioe) {

    // ignore

    }

    }

    }

    private void mixedDownload(String urlstr, String path) throws Exception {

    mixedDownload(urlstr, new File(path));

    }

    //使用IOUtils减少代码量 弃用FileUtils以对请求进行详细设置 推荐

    private void mixedDownload(String urlstr, File file) throws Exception {

    URL url = new URL(urlstr);

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

    httpURLConnection.setRequestMethod("GET");

    httpURLConnection.setRequestProperty("User-Agent", "Mozilla/4.0");

    httpURLConnection.setConnectTimeout(10000);

    httpURLConnection.setReadTimeout(10000);

    httpURLConnection.connect();

    InputStream is = httpURLConnection.getInputStream();

    try {

    FileOutputStream output = FileUtils.openOutputStream(file);

    try {

    IOUtils.copy(is, output);

    } finally {

    IOUtils.closeQuietly(output);

    }

    } finally {

    IOUtils.closeQuietly(is);

    }

    }

    private void getContentAsString(String urlstr) throws Exception {

    URL url = new URL(urlstr);

    InputStream is=url.openStream();

    ByteArrayOutputStream bos=new ByteArrayOutputStream();

    IOUtils.copy(is, bos);

    System.out.println(bos.toString());

    }

    }

旧瓶新酒-获取网络资源即爬取下载页面内容(图片、html、css、js等)的更多相关文章

  1. java实现多线程使用多个代理ip的方式爬取网页页面内容

    项目的目录结构 核心源码: package cn.edu.zyt.spider; import java.io.BufferedInputStream; import java.io.FileInpu ...

  2. scrapy(四): 爬取二级页面的内容

    scrapy爬取二级页面的内容 1.定义数据结构item.py文件 # -*- coding: utf-8 -*- ''' field: item.py ''' # Define here the m ...

  3. Scrapy爬取静态页面

    Scrapy爬取静态页面 安装Scrapy框架: Scrapy是python下一个非常有用的一个爬虫框架 Pycharm下: 搜索Scrapy库添加进项目即可 终端下: #python2 sudo p ...

  4. UI自动化之特殊处理四(获取元素属性\爬取页面源码\常用断言)

    获取元素属性\爬取页面源码\常用断言,最终目的都是为了验证我们实际结果是否等于预期结果 目录 1.获取元素属性 2.爬取页面源码 3.常用断言 1.获取元素属性 获取title:driver.titl ...

  5. scrapy模拟浏览器爬取验证码页面

    使用selenium模块爬取验证码页面,selenium模块需要另外安装这里不讲环境的配置,我有一篇博客有专门讲ubuntn下安装和配置模拟浏览器的开发 spider的代码 # -*- coding: ...

  6. [Python_scrapy图片爬取下载]

    welcome to myblog Dome地址 爬取某个车站的图片 item.py 中 1.申明item 的fields class PhotoItem(scrapy.Item): # define ...

  7. 爬取百度页面代码写入到文件+web请求过程解析

    一.爬取百度页面代码写入到文件 代码示例: from urllib.request import urlopen #导入urlopen包 url="http://www.baidu.com& ...

  8. 使用BeautifulSoup自动爬取微信公众号图片

    爬取微信分享的图片,根据不同的页面自行修改,使用BeautifulSoup爬取,自行格局HTML修改要爬取图片的位置 import re import time import requests imp ...

  9. Python爬取 | 唯美女生图片

    这里只是代码展示,且复制后不能直接运行,需要配置一些设置才行,具体请查看下方链接介绍: Python爬取 | 唯美女生图片 from selenium import webdriver from fa ...

随机推荐

  1. codeforces 19 D. Points(线段树+set二分)

    题目链接:http://codeforces.com/contest/19/problem/D 题意:给出3种操作:1)添加点(x,y),2)删除点(x,y),3)查询离(x,y)最近的右上方的点. ...

  2. 【Leetcode】【简单】【66. 加一】【JavaScript】

    题目描述 66. 加一 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字. 你可以假设除了整数 0 之外,这个整数不会以零 ...

  3. 个推TechDay参会感悟

    上周六去参加了个推和FCC联合在梦想小镇举办的TechDay,当然是作为台下听讲选手参与的,想上去讲可惜实力他不允许啊,吹牛逼我在行,讲技术可就有点虚了,老老实实的坐在台下听大佬们的分享,当然由于买了 ...

  4. I don't Blame You that You don't Understand Me

    I don't Blame You that You don't Understand Me Every one has a dead corner in himself, with no entry ...

  5. 【LeetCode】75-颜色分类

    题目描述 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色 ...

  6. JAVA MAP转实体

    public static <T> T map2Object(Map<String, Object> map, Class<T> clazz) { SimpleDa ...

  7. FreeSql (二十四)Linq To Sql 语法使用介绍

    原本不支持 IQueryable 主要出于使用习惯的考虑,如果继承 IQueryable,编写代码的智能总会提示出现一堆你不想使用的方法(对不起,我有强迫症),IQueryable 自身提供了一堆没法 ...

  8. request对象的方法

    request对象封装的是请求的数据,由服务器创建,作为实参传递给Servlet的方法,一个请求对应一个request对象,request对象可以获得请求数据. 1.获取请求行信息 (1)get提交 ...

  9. leetcode - 最小移动次数使数组元素相等

    思路 (假设数组每次都已被排好序) 每次使得小于等于最大值的n-1的数字加1,直接暴力求解会超时 改进一: 为了让最小元素等于最大元素,至少需要数组中最大值-最小值次, 所以以此为基础再次暴力求解(参 ...

  10. linux 操作系统级别监控 df 命令

    df命令可以查看当前系统磁盘空间的使用情况 命令:df -h du -sh * 查看目录文件暂用磁盘大小 如果磁盘空间不够,需清理磁盘 磁盘速度测试,如果磁盘性能不好,性能测试数据会不准确(读写速度) ...