`
ak23173969
  • 浏览: 29471 次
社区版块
存档分类
最新评论

网络爬虫雏形1号

阅读更多

 开始练习网络爬虫

  

  抓取类

DownImageAfter 

 

package com.sreach.image;

import java.io.IOException;
import java.util.LinkedList;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.junit.Test;

/**
 * 处理下载链接目的获取图片链接地址
 * 
 * */
public class DownImageAfter {

	private static LinkedList<String> urlQueue1 = new LinkedList<String>();

	@Test
	public void test() throws Exception {
		String url = "http://search.jd.com/Search?keyword=php";
		String content = getHttpClentResult(url);
		getTwoEndLink(content);
		for (int i = 0; i < urlQueue1.size();) {
			String ra_url = urlQueue1.remove();
			String ts = getHttpClentResult(ra_url);
			String tss = getJD_end_Sevel_URL(ts);

			ImageDown.getResult(tss);
		}
	}

	/**
	 * 抓取京东最后一层的真实图片
	 * 
	 * @param content
	 * @return
	 * */
	private final static String getJD_end_Sevel_URL(String content) {
		// System.out.println(content);
		if (content.split("jqimg")[1].substring(0, 1).equals("\"")) {
			return content.split("\"jqimg\":\"")[1].split("\"")[0].replaceAll(
					"/", "").replaceAll("\\\\", "/");
		} else {
			String tes = content.split("jqimg=\"")[1].split("\"")[0];
			return tes;
		}

	}

	/**
	 * 根据url通过httpclent获取内容
	 * 
	 * @param url
	 * @return
	 * @throws IOException
	 * @throws ClientProtocolException
	 * */
	private final static String getHttpClentResult(String url)
			throws ClientProtocolException, IOException {
		HttpClient client = new DefaultHttpClient();
		HttpGet get$ = new HttpGet(url);

		get$.setHeader("User-Agent",
				"	Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0");
		HttpResponse response = client.execute(get$);
		HttpEntity entity = response.getEntity();
		return EntityUtils.toString(entity);
	}

	/**
	 * 抓取后尾第二层链接到linked集合中
	 * */
	private final static void getTwoEndLink(String content) {
		String ts[] = content.split("<div class=\"p-name\">");

		for (int i = 1; i < ts.length; i++) {
			String t1 = ts[i].split("href=\"")[1].split("\"")[0];
			urlQueue1.addLast(t1);
		}
	}
}

 

 

//具体图片下载

 

ImageDown 
package com.sreach.image;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import com.sreach.util.StringUtil;

/** 图片测试下载 */
public class ImageDown {
	// 图片存储路径
	private final static String SAVEGB_PATH = "D:\\图片下载\\";

	// jpg格式
	private final static String IMAGEPATTEN_JPG = ".jpg";

	/**
	 * 根据链接后缀是否为图片作为判断
	 * 
	 * @param 文件原始超链接
	 * @return
	 * */
	public final static Boolean getResult(String imageUrlPath) {
		Boolean tag = false;

		if (imageUrlPath.endsWith(IMAGEPATTEN_JPG)) {
			tag = true;
			saveIMAGE(imageUrlPath);
		}
		return tag;
	}

	/**
	 * 通过超链接保存图片
	 * 
	 * @param 文件原始超链接
	 * */
	private final static void saveIMAGE(String imageUrlPath) {
		HttpClient client = new DefaultHttpClient();
		try {
			HttpGet get$ = new HttpGet(imageUrlPath);
			HttpResponse response = client.execute(get$);
			HttpEntity entity = response.getEntity();
			byte bs[] = null;
			if (entity != null) {
				bs = EntityUtils.toByteArray(entity);
			}

			StringBuilder bbs = new StringBuilder();

			bbs.append(SAVEGB_PATH).append(
					getImageSourceWebsite(imageUrlPath));

			File file = new File(bbs.toString());

			if (!file.exists()) {
				file.mkdir();
			}
			savePC_GB(getFileName(imageUrlPath, bbs.append("\\").toString()),
					bs);
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {

			e.printStackTrace();
		}
	}

	/**
	 * 保存图片到本地硬盘
	 * 
	 * @param filepath
	 *            文件路径,content 内容字节文件
	 * */
	private final static void savePC_GB(String filepath, byte[] content)
			throws IOException {
		File f = new File(filepath);
		if (f.exists()) {
			f = new File(filepath.replace(".jpg",
					Integer.toString(new Random().nextInt()) + ".jpg"));
		}
		BufferedOutputStream out = new BufferedOutputStream(
				new FileOutputStream(f));
		out.write(content);
		out.close();
		System.out.println("下载" + f.getName() + "图片成功");
	}

	/**
	 * 获取图片文件名
	 * 
	 * @原始文件链接地址(包含来源网站)
	 * @return
	 * */
	private final static String getFileName(String imageUrlPath,
			String realPath) {
		StringBuilder bs = new StringBuilder();
		bs.append(realPath);
		bs.append(StringUtil.getDateAndTime("YYYYMMddHHmmss"));
		bs.append("-");
		String path = getImageSourceWebsite(imageUrlPath);
		bs.append(path);
		bs.append(".jpg");
		return bs.toString();
	}

	public final static String getImageSourceWebsite(String imageUrlPath) {
		return imageUrlPath.split("http://")[1].split("/")[0];
	}

	public static void main(String[] args) {
		String imageUrlPath = "http://img12.360buyimg.com/n0/g14/M05/05/16/rBEhVVHmJ0YIAAAAAAHB_WJwDrkAABHIgOyzAcAAcIV854.jpg";
		getResult(imageUrlPath);

	}
}

 

 

0
4
分享到:
评论

相关推荐

    网络爬虫作业练习_爬虫_python学习_网络爬虫_python_

    在IT领域,网络爬虫是一项重要的技术,尤其对于数据挖掘、数据分析和自动化信息获取来说更是不可或缺。本主题围绕“网络爬虫作业练习”,主要涉及Python编程语言和相关的爬虫技术,我们将深入探讨这些知识点。 首先...

    H3C网络大爬虫1-12期全集.rar

    网络大爬虫第1期-交换专题 网络大爬虫第2期-OSPF专题 网络大爬虫第3期-BGP专题 网络大爬虫第4期-QoS专题 网络大爬虫第5期-NAT专题 网络大爬虫第6期-MPLS 网络大爬虫第7期-安全专题 网络大爬虫第8期-HA专题 ...

    解析Python网络爬虫_复习大纲.docx

    1. 网络爬虫又被称为网页蜘蛛、网络机器人。 2. 网络爬虫能够按照一定的规则,自动请求万维网网站并提取网络数据。 3. 根据使用场景的不同,网络爬虫可分为通用爬虫和聚焦爬虫两种。 4. 爬虫可以爬取互联网上公开的...

    Python网络爬虫实战.pdf

    本书从Python的安装开始,详细讲解了Python从简单程序延伸到Python网络爬虫的全过程。本书从实战出发,根据不同的需求选取不同的爬虫,有针对性地讲解了几种Python网络爬虫。本书共8章,涵盖的内容有Python语言的...

    网络爬虫技术 爬虫技术

    网络爬虫技术 爬虫技术网络爬虫技术 爬虫技术网络爬虫技术 爬虫技术网络爬虫技术 爬虫技术网络爬虫技术 爬虫技术网络爬虫技术 爬虫技术网络爬虫技术 爬虫技术网络爬虫技术 爬虫技术网络爬虫技术 爬虫技术网络爬虫...

    网络爬虫论文答辩PPT课件

    网络爬虫论文答辩,网络爬虫论文答辩课件,网络爬虫论文答辩PPT

    Python网络爬虫代码

    【Python网络爬虫代码】是基于Python3编程语言实现的一款数据抓取工具,主要用于从互联网上,特别是百度百科这类网站,自动获取指定网页中的信息。爬虫技术在信息技术领域扮演着重要角色,它能帮助我们高效地提取...

    Python网络爬虫与数据采集.pdf

    Python网络爬虫与数据采集是一门技术课程,主要内容包括网络爬虫的基础知识、网络爬虫请求的基本处理、使用Python相关库进行网络请求、理解HTTP协议及其相关技术,以及如何应对常见的反爬虫策略等。 网络爬虫基础...

    网络爬虫.论文答辩PPT

    1. **网络爬虫的基本原理**:网络爬虫通常由以下几个部分组成:URL管理器、下载器、解析器和数据库。URL管理器负责跟踪要访问的网页列表,下载器获取网页内容,解析器则从下载的HTML或XML文档中提取有价值的数据,...

    Python网络爬虫技术_习题答案.rar

    Python网络爬虫技术是当前IT领域中非常热门的一个分支,尤其在大数据分析和人工智能应用中起着关键作用。本资源“Python网络爬虫技术_习题答案.rar”看似是一个教学资料,包含了一些图像文件和章节内容,我们可以从...

    爬虫开发《Python3网络爬虫开发实战代码》

    【爬虫开发】《Python3网络爬虫开发实战代码》 说明:《Python3网络爬虫开发实战代码》----&gt;mitmtest (Practical code for development of Python 3 web crawler) 【爬虫开发】《Python3网络爬虫开发实战代码》文件...

    2:python网络爬虫权威指南_python网络爬虫权威指南_python爬虫指南_

    网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

    网络爬虫需求分析.docx

    网络爬虫需求分析 网络爬虫需求分析是指对网络爬虫系统的需求进行分析和定义,以确保系统的开发和实施符合用户的需求和期望。本文档旨在对网络爬虫需求进行详细的分析和定义,从而确保系统的开发和实施符合用户的...

    Python入门网络爬虫之精华版

    1. 抓取:是网络爬虫工作的第一步,主要是从目标网站获取数据。常用的方法包括发送HTTP请求(GET和POST请求)。 - GET请求通常用于从服务器获取数据,可以通过Python的urllib2模块,requests库,以及httplib2库来...

    网络爬虫文档资料

    网络爬虫,也被称为网页蜘蛛或网络机器人,是自动化地浏览互联网并抓取信息的程序。在Java中,实现网络爬虫是一项常见的任务,尤其对于数据挖掘和数据分析领域。本文档资料将深入探讨如何利用Java语言来构建有效的...

    网络蜘蛛及网络爬虫详解

    1. **初始化**:网络蜘蛛从一个或多个起始URL开始,这些URL构成了爬虫工作的入口点。 2. **页面下载**:蜘蛛会访问这些URL,下载网页的HTML源代码。 3. **链接提取**:从下载的网页中,蜘蛛会识别出指向其他网页的...

    网络爬虫网络爬虫网络爬虫

    网络爬虫 网络爬虫 网络爬虫网络爬虫网络爬虫网络爬虫网络爬虫网络爬虫网络爬虫网络爬虫网络爬虫网络爬虫网络爬虫

    网络爬虫程序-网络爬虫程序

    1. **种子URL**:爬虫开始于一个或多个种子URL,这些是待抓取网页的初始集合。 2. **发出请求**:爬虫将这些URL发送到服务器,请求网页内容。 3. **接收响应**:服务器返回HTML或其他格式的网页内容。 4. **解析页面...

    基于Python的网络爬虫与反爬虫技术研究.pdf

    网络爬虫是一种能够自动收集网页数据的程序,通常也被称为网络蠕虫或网页蜘蛛。由于网络爬虫的活动目前主要受制于“君子协定”——robots.txt协议,因此它在法律上并未有明确的限制,这使得网络爬虫在“大数据”背景...

Global site tag (gtag.js) - Google Analytics