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(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());

}

}

}

java从网页抓取图片_抓取一个网站特定的全部图片(JAVA)相关推荐

  1. java随机抓取网站上的图片_抓取一个网站特定的全部图片(JAVA)

    1. 目的 用五笔时,如果碰到不会拆的字,只好换回拼音.但这样做治标不治本,于是到网上找五笔反查工具.最后发现一个不错的网站--不仅有每个字对应的五笔码,还有其字根图.可惜的是,这是一个网站.换句说, ...

  2. 获取http地址如何从上面抓取图片_用 Python 自动抓取妹子图

    目录 前言 Media Pipeline 启用Media Pipeline 使用 ImgPipeline 抓取妹子图 瞎比比与送书后话 前言 我们在抓取数据的过程中,除了要抓取文本数据之外,当然也会有 ...

  3. Java爬虫实战(一):抓取一个网站上的全部链接

    前言:写这篇文章之前,主要是我看了几篇类似的爬虫写法,有的是用的队列来写,感觉不是很直观,还有的只有一个请求然后进行页面解析,根本就没有自动爬起来这也叫爬虫?因此我结合自己的思路写了一下简单的爬虫,测 ...

  4. 怎么创建数据表的实体类和业务类_怎样创建一个网站?

    怎样创建一个网站?创建网站有三个特别重要的元素,域名.服务器和程序,网站域名按照流程注册就可以了,网站服务器根据网站需要的空间选择,这两个只要你查查或者问提供商就可以慢慢操作的,其中最难的程序,里面需 ...

  5. Python爬取一个网站的所有图片(附源码)

    前面搭建爬虫环境完成第一个实例爬取信息,今天继续,Python第二个项目:爬取一个网站的所有图片,看到一个网站的图片,想要弄到本地,一张张保存太过于麻烦,于是,往下看: 爬取目标网站:https:// ...

  6. python第一个项目:爬取一个网站的所有图片

    目的:爬取一个网站的所有图片 调用库:requests库,BeautifulSoup库 程序设计: 1.函数getHTML():用于获取url的html文本 代码如下 def getHTML(url) ...

  7. xmpp协议抓包_抓包工具有哪些?大佬们常用的18款抓包工具就是这些

    最近很多同学,说面试的时候被问道,有没有用过什么抓包工具,其实抓包工具并没有什么很难的工具,只要你知道你要用抓包是干嘛的,就知道该怎么用了!一般对于测试而言,并不需要我们去做断点或者是调试代码什么的, ...

  8. python打开网页并输入数据_使用Python登陆网站读取表格数据

    近期有经常使用的数据,需要登陆到某个网站,将其中的表格数据读取出来,为了提高效率节省工作时间,决定写一个程序,使用Python自动登陆到该网站然后将某日(参数)的数据读取并存放于excel表格中. 1 ...

  9. java \t怎么从头开始_通过这些简单的步骤从头开始学习Java

    java \t怎么从头开始 Java是用于软件开发的最受欢迎的编程语言之一. 无论您的最终目标或技能水平如何,学习和掌握Java都将为您作为开发人员打开大门. 今天,我们将讨论一些原因,我们认为您应该 ...

最新文章

  1. [转]select、poll、epoll的比较
  2. [转载] 七龙珠第一部——第034话 红缎带军团
  3. antlr4 idea插件_正则都搞不定、我还有Antlr4解析器
  4. 【转】医学影像处理相关知识整理(一)
  5. html表单php连接mysql数据库_使用HTML表单和PHP更新MySQL
  6. SELinux系列(十一)——SELinux策略规则查看方法(seinfo和sesearch)详解
  7. ros melodic控制真实机械臂之urdf模型生成
  8. Mean filter 和 Gaussian filter对比
  9. DS18B20 引脚 定义 单总线 多点温度检测 STM32 单片机
  10. Oracle客户端安装简易教程
  11. 微信小程序数据库关于openId的坑
  12. Deepin15.3 安装firefox flash插件
  13. logmein攻防世界wp
  14. 关于datetimepicker 鼠标滚动调节日期变化遇到的问题
  15. 周杰伦2011所有歌曲完整版无删节全正版打包免费下载 http://115.com/file/bhr
  16. 简单模拟医院叫号系统
  17. 关于小程序移动端调用微信API及腾讯地图实例,获取当前位置、逆地址解析、路线规划、地图展示
  18. 3D游戏建模室内材质调整方法
  19. 问题 A: 深入浅出学算法044-最大整数
  20. 空间直角坐标系(XYZ)转经纬度(BLH)

热门文章

  1. 计算机网络化最主要的特点是,【2018年职称计算机考试Internet考前押题及答案2】 中级会计职称有用吗...
  2. 计算机语言中的逻辑型数据,零基础易语言入门教程(五)之逻辑型数据类型
  3. 详细介绍ERNIE 3.0: Large-scale Knowledge Enhanced Pre-training for Language Understanding and Generation
  4. 每天学命令get_propertyPin Properties
  5. 华为交换机打开光口命令_华为交换机S2750如何打开复合光口?
  6. 如何运营一个有吸引力的公众号?促活粉丝是关键。
  7. 模糊控制与自适应控制
  8. 微软打印机驱动服务器,打印机驱动或成历史 云打印还看微软
  9. OpenCV开发之——官方Samples介绍
  10. IP协议和TCP协议详解