抓取一个网站特定的全部图片(JAVA)

news/2024/5/20 23:51:35/文章来源:https://blog.csdn.net/YZW0123900/article/details/101605823

1. 目的

     用五笔时,如果碰到不会拆的字,只好换回拼音。但这样做治标不治本,于是到网上找五笔反查工具。最后发现一个不错的网站——不仅有每个字对应的五笔码,还有其字根图。可惜的是,这是一个网站。换句说,就是每次查的时候都要上网。很自然的,会想到将这个网站上的五笔码以及对应的字根图保存到本地上,再写个查询程序做成本地版的>_<

 

2. 准备工作——网页特点分析

                      

      网站(http://www.wb86.com/wbcx)提供了两种查询方式:一种是输入要查询的字;另外一种是一页接着一页地查看。由于懒得找字库,就选择了第二种方式。在此方式下,第一页的URL是http://www.wb86.com/wbcx/index5.asp?page=1,第二页的URL是http://www.wb86.com/wbcx/index5.asp?page=2,第三页的URL是http://www.wb86.com/wbcx/index5.asp?page=3。通过前三个页的URL,有理由相信第X页的URL是http://www.wb86.com/wbcx/index5.asp?page=X。
      解决URL问题后,就要分析如何从单个网页得到所需要的资源。查看第一页的源代码发现“86五笔编码”只出现过一次,而且其后面就是想要的五笔码。因此得到服务器发回的内容后,再定位到“86五笔编码”就能得到相应的五笔码。字根图的URL地址出现在五笔码之后,而且都是以“http://www.wb86.com/GIF-82”开头的。因此在“86五笔编码”之后的内容中,找到第一个以“http://www.wb86.com/GIF-82”开头的URL,就是需要的图片地址了。

 

3. 算法流程

for( 第一页到最后一页 ) {
 获取这一页的源代码
 从源代码中提取五笔码,字根图的URL
 获取字根图
}

 

4. 源代码

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.LinkedList;

import javax.imageio.ImageIO;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.DefaultHttpClient;


public class Clawler {
private static final int END_PAGE = 6764;
private static final String PREFIX = "http://www.wb86.com/wbcx/index5.asp?page=";
private static final String CODE_SAVE_PATH = "D:\\Wubi\\WubiCode.txt";
private static final String IMG_SAVE_PATH_PREFIX = "D:\\Wubi\\img\\";

private static LinkedList queue = new LinkedList();

private static String m_imguri;

public static void main(String[] args) throws IOException {
HttpClient httpClient = new DefaultHttpClient();

FileWriter fw = null;
fw = new FileWriter(CODE_SAVE_PATH);

for(int i = 1; i <= END_PAGE; ++i) {
HttpUriRequest request = new HttpGet(PREFIX + i);

try {
HttpResponse response = httpClient.execute(request);

HttpEntity entity = response.getEntity();
StringBuilder builder = new StringBuilder();
if( entity != null ) {
InputStream is = entity.getContent();
byte[] tmp = new byte[2048];
while( is.read(tmp) != -1 ) {
builder.append(new String(tmp));
}

fw.write( getWubiCode(builder.toString(), i) );
downloadImg(m_imguri, IMG_SAVE_PATH_PREFIX + i + ".gif", i);
}

}
catch( Exception e ) {
queue.addLast((Integer)i);
e.printStackTrace();
}

if( i%100==0 ) {
fw.flush();
}
}

System.out.println("\n missing Code");
while( !queue.isEmpty() ) { //下载失败的页面
System.out.println(queue.element());
queue.removeFirst();
}

System.out.print("all done");
fw.close();
httpClient.getConnectionManager().shutdown();
}

public static String getWubiCode(String page, int number) { //提取五笔码,字根图的URL
StringBuilder save = new StringBuilder();
page = page.substring(page.indexOf("86五笔编码"));

int index = 7;
while( page.charAt(index)!= '<' ) save.append(page.charAt(index++));
save.append(System.getProperty("line.separator"));

index = 0;
StringBuilder imgpath = new StringBuilder();
page = page.substring(page.indexOf("http://www.wb86.com/GIF-82"));
while( page.charAt(index) != '\"' ) imgpath.append(page.charAt(index++));
m_imguri = imgpath.toString();

save.insert(0, imgpath.charAt(imgpath.length() - 5));
save.insert(1, ' ');

return save.toString();
}

public static void downloadImg(String url, String path, int number) { //下载图片
try {
File out = new File(path);
BufferedImage buffer = ImageIO.read(new URL(url));
if( buffer == null ) {
queue.addLast(number);
System.out.println(number + " " + url);
}
else {
ImageIO.write(buffer, "gif", out);
}
}
catch( IOException e ) {
queue.addLast(number);
System.out.println(url);
System.out.println(e.getMessage());
}
}
}

 

 

5. 参考资料
a. httpClient4.1入门教程(中文版)
http://wenku.baidu.com/view/0a027c5e804d2b160b4ec029.html
b. 论坛图片爬虫的一种实现
http://www.iteye.com/topic/1044289
c. 最简单的搜索引擎思路
http://www.iteye.com/topic/1055424

 

 

 

转载于:https://www.cnblogs.com/FengYan/archive/2011/11/29/2267372.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_893025.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

轻松完成网站提速:来自Google、淘宝等的Nginx PageSpeed模块

mod_pagespeed于2010年发布&#xff0c;让网站管理员可以为其Web应用提速&#xff0c;而不需要深度的性能优化造诣。mod_pagespeed最初版本只作为Apache的模块&#xff0c;并不兼容Nginx这个最流行并为许多大型站点所使用的高性能开源网络服务器。如今Nginx的PageSpeed Beta版终…

大型网站架构演变和知识体系

之前也有一些介绍大型网站架构演变的文章&#xff0c;例如LiveJournal的、ebay的&#xff0c;都是非常值得参考的&#xff0c;不过感觉他们讲的更多的是每次演变的结果&#xff0c;而没有很详细的讲为什么需要做这样的演变&#xff0c;再加上近来感觉有不少同学都很难明白为什么…

高性能网站架构设计之缓存篇(5)- Redis 集群(上)

转自&#xff1a;http://www.cnblogs.com/zhaoguihua/p/redis-005.html 集群技术是构建高性能网站架构的重要手段&#xff0c;试想在网站承受高并发访问压力的同时&#xff0c;还需要从海量数据中查询出满足条件的数据&#xff0c;并快速响应&#xff0c;我们必然想到的是将数…

设计相关的网站

来自&#xff1a;http://blog.csdn.net/leejizhou/article/details/51623082 李济洲的博客 ) 这篇文章给大家介绍几个设计相关的网站&#xff0c;因为博主除了软件开发以外还比较喜欢设计&#xff0c;据我观察了解程序员普遍审美都是比较差的&#xff0c;所以这次给大家推荐几…

linux企业实战 大型网站架构概述

大型网站架构概述 网站架构演化发展历程 初始阶段的网站(特点:没人)应用程序、数据库、文件都在一个服务器 应用服务和数据服务分离 随着网站业务的发展&#xff0c;-台服务器逐渐不能满足需求:性能越来越差&#xff0c;存储空间不足。这是就需要应用和数据分离 应用服务…

为程序员准备的7个国外社交网站

Forrst Forrest是为开发人员和设计师提供的一个新兴的地方&#xff0c;在这里可以分享代码和截图以及链接&#xff0c;启发你的灵感。如果你曾想为你的一块代码获得一些专业实诚 的建议&#xff1b;如果你在几个logo中没法做出决定的时候&#xff0c;Forrst正好适合你。此社区正…

技术网站

VC知识库&#xff1a;http://www.vckbase.com/&#xff1b; 0GiNr技术社区&#xff08;我们的微型技术圈&#xff09;&#xff1a;http://krnl.info/&#xff1b; 看雪学院&#xff1a;http://bbs.pediy.com/&#xff1b; 在线编程挑战平台Interview Street&#xff1a;ht…

浏览器只有百度不能上网,其他网站上网正常

发现一个问题&#xff0c;困然了我几天&#xff0c;下班之前电脑好好的&#xff0c;都是正常&#xff0c;第二天上班&#xff0c;浏览器有关百度的网址全部打不开&#xff0c;还有部分网址也打不开&#xff0c;查看了host文件&#xff0c;更改刷新了dns&#xff0c;也更改了浏览…

今年2月 黑客组织Anonymous 攻陷技术公司HBGary Federal的网站,由此带来的7点教训

黑客组织Anonymous组织采用了一系列简单的技术方法和社会工程学来攻击安全技术公司HBGary Federal公司的网络&#xff0c;这其中涵盖的很多网络技术问题都值得其他网络安全专家借鉴。 最重要的教训就是&#xff1a;认真遵循企业防御基本的最佳做法。另外还可以从HBGary Federal…

建站流程

文章目录 建站流程前期准备工作登录厂商账号在管理中心下面现在进入运营中心 建站流程 前期准备工作 需要&#xff1a;厂商账号&#xff0c;前台域名…… 登录厂商账号 在管理中心下面 进入管理中心 > 用户 > 组织机构 > 全平台 填写相关信息&#xff08;不知道…

关于phpStudy如何修改默认网站

#####摘要&#xff1a;使用过php开发项目的IT猴子90%的人都是知道有这一个本地项目搭建的圣器——phpStudy。phpStudy支持Web端管理&#xff0c;一键创建网站、FTP、数据库、SSL&#xff1b;安全管理&#xff0c;计划任务&#xff0c;文件管理&#xff0c;PHP多版本共存及切换&…

导入他人的网站很多页面找不到的可能原因

问题与原因&#xff1a;有的时候&#xff0c;导入他人的项目页面无法加载&#xff0c;报了很多404的问题&#xff0c;而直接根据自己实际的网站路径却能访问成功。这是因为某些网站前端加载的界面写的是绝对路径&#xff0c;而不同人部署的网站根目录的不同&#xff0c;就导致了…

NET MVC 2 多语言网站的实现

.NET MVC 2 多语言网站的实现 2010-10-24 12:26:10| 分类&#xff1a; .net mvc | 标签&#xff1a; |字号大中小 订阅 要求如下&#xff1a; 1,用 Resources 2,分离项目(Model , Controller 等分开成子项目) 3&#xff0c;简单 因为要用 Resources &#xff0c;所以很…

网站架构之架构演化

网站从构建之初的很少有人问津&#xff0c;用户数量较少&#xff0c;并发量较低&#xff0c;到之后的拥有千万上亿用户&#xff0c;数万量级的高并发&#xff0c;之间经历了怎样的过程&#xff0c;小型网站架构是怎样逐步演化的&#xff0c;本文简单探讨下这方面的内容&#xf…

基于renren.com和google map的sns网站

基于renren.com和google map的sns网站 网站介绍及寻找合作伙伴 站点名称 网站的功能 意见及建议 支持与合作 站点名称 本网 站基于renren.com和google map的开放的api&#xff0c;充分利用了renren的sns属性和google map的直观视图&#xff0c;故网站暂定名RenrenMap 。 回…

搭建网站之路

我是在申请一个阿里云服务器之后才想起搭建网站的&#xff0c;哈哈&#xff0c;我的驱动力就是好玩。下面说下我搭建人生中中第一个网站(博客)的心里路程 1、首先申请一个服务器 我申请的是阿里云服务器&#xff0c;centos6.6的操作系统&#xff0c;1G内存&#xff0c;20G的磁…

打开网站工程时遇到配置bower显示404的问题。

在装了mongodb和nodejs准备打开一个网站项目时&#xff08;网页包含angular&#xff09;&#xff0c;却发现&#xff0c;打开后网页的内容全是混乱的。然后查看nodejs的运行状况&#xff0c;发现有些包含bower的项目&#xff08;特别是有些angular的项目&#xff09;显示的是40…

Python学习记录-网站爬点句子

背景 想用python上网爬点句子&#xff0c;于是花一下午的时间来做这件事&#xff0c;这只是一个简单的例子&#xff0c;不过对于入坑来说nn conda使用 顺便添加一下conda的使用&#xff0c;之前一直是用python自带的virtualenv工具&#xff0c;安装了anoconda后还是觉得cond…

不同网站和页面爬虫知识点

1、json.loads()解码python json格式 json.load()加载python json格式文件 因此使用requests.get(url)和urllib.urlopen(url)获取内容的方式如下&#xff1a; 2、关于爬取Ajax动态加载&#xff08;翻页时url不变&#xff09;的网页网站 &#xff08;1&#xff09;中国票房网&a…

Github 无法登陆,网站超时问题

网络诊断为&#xff1a;电脑配置没有问题&#xff0c;但是该网站服务器资源无法访问。 简单点直接上解决办法&#xff1a;在hosts文件中添加网站IP。 在文件目录下&#xff1a;C:\Windows\System32\drivers\etc 中&#xff0c;将hosts文件复制到桌面&#xff0c;右键 【属性】…