介绍

  本篇博客将继续上一篇博客:Python爬虫之使用Fiddler+Postman+Python的requests模块爬取各国国旗 的内容,将用Java来实现这个爬虫,下载全世界国家的国旗图片。项目不再过多介绍,具体可以参考上一篇博客。
  我们将全世界国家的名称放在一个txt文件中,每一行一个国家名字,该文件位于E盘flag目录下,名称为countries.txt, 部分内容如下:

爬虫程序

  我们这个爬虫的思路还是和上一篇博客的思路一样:先是读取countries.txt中的国家名称,以国家名称为参数,读取该国家搜索后的所在网页,再找到该搜索网页中的国家的国旗图片,并实现下载。这个搜索的过程,我们可以用Java的URL包中的POST方法来实现,关于POST方法的请求头和请求体,可以用Fiddler工具进行抓包分析。
  该Java项目的具体结构如下:

其中用到的第三方API为commons-io和Jsoup,主函数为Country_Flag_Download.java,其java代码完整如下:

package wikiScrape;import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;import org.apache.commons.io.FileUtils;public class Country_Flag_Download {public static void main(String[] args){String fileName ="E://flag/countries.txt";// 读取countries.txt文件中的国家名,储存在ArrayList中ArrayList<String> countries = readFileByLines(fileName);for(String country: countries) {String page = doPost(country); // 获取国家所在的网页if (page.indexOf("html") >= 0) { // 获取成功getContent(page);            // 下载该国国家的国旗}}System.out.println("国旗下载完毕!");}/* 发送HTTP的POST请求,获取指定国家的网页地址* 传入参数:country(国家): String类型*/public static String doPost(String country){String url = "http://country.911cha.com/";try {// 设置网址,打开连接URL obj = new URL(url);HttpURLConnection conn = (HttpURLConnection) obj.openConnection();// 设置POST请求头和请求体,请求体的参数为国家(country)conn.setUseCaches(false);conn.setRequestMethod("POST");String USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36";conn.setRequestProperty("User-Agent", USER_AGENT);conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");String postParams = String.format("q=%s", country);// 传入POST请求体的参数conn.setDoOutput(true);OutputStreamWriter os = new OutputStreamWriter(conn.getOutputStream(),"UTF-8");os.write(postParams);os.flush();os.close();// 获取响应结果状态码int responseCode = conn.getResponseCode();if (responseCode == HttpURLConnection.HTTP_OK) { //如果响应状态码为200// 将HTML内容解析成UTF-8格式Document doc = Jsoup.parse(conn.getInputStream(), "utf-8", url);// 刷选需要的网页内容String page = doc.select("div.mcon").get(1).selectFirst("ul").selectFirst("li").selectFirst("a").attr("href");return page;} else { // 如果响应状态码不是200, 则返回"Get page failed!"return "Get page failed.!";}}catch(Exception e){return "Get page failed.";}}// getContent()函数主要实现下载指定国家的国旗public static void getContent(String page){String base_url = "http://country.911cha.com/";String url = base_url+page;try{// 利用URL解析网址URL urlObj =  new URL(url);// URL连接URLConnection urlCon = urlObj.openConnection(); // 打开URL连接// 将HTML内容解析成UTF-8格式Document doc = Jsoup.parse(urlCon.getInputStream(), "utf-8", url);// 刷选需要的网页内容Element image = doc.selectFirst("img");String flag_name = image.attr("alt").replace("国旗", "");String flag_url = image.attr("src");URL httpurl = new URL(base_url+'/'+flag_url);// 利用FileUtils.copyURLToFile()实现图片下载FileUtils.copyURLToFile(httpurl, new File("E://flag/"+flag_name+".gif"));System.out.println(String.format("%s国旗下载成功~", flag_name));}catch(Exception e){e.printStackTrace();System.out.println("下载失败!");}}// 以行读取文件,返回ArrayList, 里面的元素为每个国家的名称public static ArrayList<String> readFileByLines(String fileName) {  File file = new File(fileName);  BufferedReader reader = null;  // 设置reader为nullArrayList<String> countries = new ArrayList<String>();try {  reader = new BufferedReader(new FileReader(file));  String tempString = null;  // 一次读入一行,直到读入null为文件结束  while ((tempString = reader.readLine()) != null)countries.add(tempString); // 在列表中添加国家名称reader.close(); // 关闭readerreturn countries;} catch (IOException e) {  return countries;  } finally {  if (reader != null) {  try {  reader.close();  }catch (IOException e1) {  e1.printStackTrace();}  }  }  } }

运行结果

  点击运行该Java程序,可以发现在E盘的flag目录下已经下载了全世界国家的国旗图片,查看如下:

  Bingo, 我们的Java爬虫程序运行成功!本次爬虫的主要目标是为了在Java中实现类似于Python中的requests模块的POST方法~

注意:本人现已开通两个微信公众号: 因为Python(微信号为:python_math)以及轻松学会Python爬虫(微信号为:easy_web_scrape), 欢迎大家关注哦~~

Java爬虫之下载全世界国家的国旗图片相关推荐

  1. 推荐一个可以下载各个国家地区国旗和组织旗帜的素材网站

    日常工作中,经常会碰到需要下载某个国家国旗或者地区旗帜.组织旗帜的时候,常见的一些素材下载站要么需要付费,要么下载的图不够清楚,今天推荐一个网站,可以免费下载世界各个国家的国旗,地区区旗,组织旗帜等素 ...

  2. Java爬虫之下载IMDB中Top250电影的图片

    介绍   在博客:Scrapy爬虫(4)爬取豆瓣电影Top250图片中我们利用Python的爬虫框架Scrapy,将豆瓣电影Top250图片下载到自己电脑上.那么,在Java的爬虫的也可以下载图片吗? ...

  3. java爬虫之下载txt小说

    最近迷上了天蚕土豆写的<大主宰>这本玄幻小说,无奈找不到下载链接.于是就萌生了自己爬取小说章节的想法,代码其实很简单,主要在于分析网页结构.正则匹配以及文件保存. 1. 分析网页结构 爬取 ...

  4. Java爬虫获取网页视频,音乐,图片等

    如何使用Java写爬虫来获取网页视频 方法1对于没有反爬虫机制(不多说直接上代码) @SuppressWarnings("all") public String getVideo( ...

  5. 一文简述用php实现爬虫(下载英雄联盟所有英雄图片)

    一文简述用php实现爬虫 本文将用最简单的方法实现爬虫,用php语言实现.在本文里,不会使用专业术语,甚至可能会出现很多不正确的专业术语,还请各位海涵. 步骤 一文简述用php实现爬虫 使用步骤 1. ...

  6. 知识点滴 - 世界上有多少国家?国旗是什么?

    关于这个问题,并没有一个正确的答案.地图和国家体系是政治性的,所以它可以根据你的观点和你来自哪里而有所不同. 联合国有193个成员国.两个联合国观察员(巴勒斯坦和梵蒂冈城,Palestine and ...

  7. Java爬虫(二)-- httpClient模拟Http请求+jsoup页面解析

    博客 学院 下载 GitChat TinyMind 论坛 APP 问答 商城 VIP会员 活动 招聘 ITeye 写博客 发Chat 传资源 登录注册 原 Java爬虫(二)-- httpClient ...

  8. java爬虫下载图片到磁盘_java入门爬虫(爬取网页的图片下载到本地磁盘)

    java爬虫入门技术 我们需要用到http协议 从而建立java程序和网页的连接 URL url = new URL("https://www.ivsky.com/tupian/ziranf ...

  9. 使用Java编写爬虫,下载百度图片

    因为最近需要很多图片素材做机器训练,所以写一个爬虫来下载百度图片里的一些图片,用作机器学习. 先看看效果图: 实现思路: 根据百度图片的Ajax请求,用Chrome获取到URL,然后通过改变URL参数 ...

最新文章

  1. 多种IP网络技术的原理和特点
  2. 对map集合进行排序
  3. Kafka 压测:3 台廉价服务器竟支撑 200 万 TPS
  4. xp共享计算机,XP怎么设置局域网共享?
  5. java ioexception异常_12. Java IO: 异常处理
  6. 设无向图g如图所示_阿里重磅发布大规模图神经网络平台 AliGraph,架构算法解读...
  7. Q绑查询html单页源码 自带接口
  8. MWC(2) Multiwii初学者详细准备
  9. mysql 热迁移,proxmox迁移详解
  10. ssis sql_SSIS OLE DB来源:SQL命令与表或视图
  11. 解决eclipse maven工程中src/main/resources目录下创建的文件夹所显示样式不是文件夹,而是“包“图标样式的问题
  12. 安装 | Android studio 3.5.2安装教程
  13. python学习[一]
  14. SQL12 获取每个部门中当前员工薪水最高的相关信息
  15. Effective C++ item 6
  16. 吞云吐雾,美国电子烟问题,内附FDA的一个隐情
  17. 直流电源_稳压管稳压电路
  18. oracle12c 环境需求,Oracle12C之环境准备工作
  19. 微信公众号 卡券 addCard 签名错误 踩坑记录
  20. 如何解决收到网监大队信息系统安全等级保护限期整改通知书

热门文章

  1. 网络经济与企业管理【十】之供应链管理
  2. python判断邮件发送成功_(原创)python发送邮件
  3. 办公室局域网监控员工上网记录合适吗?
  4. 浅析未来大数据的发展趋势
  5. spring3.2入门到大神(备java基础、jsp、servlet,javaee精髓)-任亮-专题视频课程
  6. 在linux下安装aapt/apktool
  7. web前端-JS入门
  8. GEE|在GEE对Sentinel-2、Landsat7、Landsat8进行批量大气校正、去云,并进行均值融合、裁剪、显示和数据下载
  9. [每日100问][2011-9-08]iphone开发笔记,今天你肿了么
  10. 1988年的图灵奖获得者-Ivan Edward Sutherland