java抓取世界国家国旗
本文章是借鉴博客:https://blog.csdn.net/jclian91/article/details/80950334 ,好了,直接看源码:
package com.getcount;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
/**
* @ClassName: WordNationalFlag
* @Description: java爬虫爬取世界国旗
* @author lhz
* @date 2018年7月9日 下午10:59:01
*/
public class WordNationalFlag {
/* 发送HTTP的POST请求,获取指定国家的网页地址
* 传入参数:country(国家): String类型
*/
public static String doPost(String country){
String url = "http://country.911cha.com/";
try{
//设置网址打开链接
URL uri = new URL(url);
HttpURLConnection conn = (HttpURLConnection)uri.openConnection();
//设置post请求头和请求体,请求体的参数位国家
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 osw = new OutputStreamWriter(conn.getOutputStream(),"UTF-8");
osw.write(postParams);
osw.flush();
osw.close();
//获取相应结果的状态码
int code = conn.getResponseCode();
if(code == HttpURLConnection.HTTP_OK){
//将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,则加载失败
return "Get page failed!";
}
}catch(Exception e){
System.out.println(e.getMessage());
}
return "Get page failed!";
}
/**
* @Title: getConnection
* @Description: getContent()函数主要实现下载指定国家的国旗
* @param 设定文件
* @return void 返回类型
* @throws
*/
public static void getConnection(String page){
String base_url = "http://country.911cha.com/";
String url = base_url + page;
try{
//利用url解析网址
URL uri = new URL(url);
//url连接
URLConnection conn = uri.openConnection();
//将html内容解析成utf-8
Document doc = Jsoup.parse(conn.getInputStream(), "utf-8",url);
//刷选需要的网页内容
Element image = doc.selectFirst("img");
String flag_name = image.attr("alt").replace("国旗", "");
String flag_url = image.attr("src");
URL urls = new URL(base_url + "/" + flag_url);
// 利用FileUtils.copyURLToFile()实现图片下载
FileUtils.copyURLToFile(urls, new File("C://Users/admin/Desktop/文档/世界国旗集/"+flag_name+ ".gif"));
System.out.println("%s国旗下载成功" +":"+ flag_name);
}catch(Exception e){
e.getMessage();
}
}
/**
* @Title: readyFileByLines
* @Description: 以每行的样式读取文件,返回ArrayList,里面的元素位每个国家的名称
* @param @param fileName
* @param @return 设定文件
* @return ArrayList<String> 返回类型
* @throws
*/
public static List<String> readyFileByLines(String fileName){
File file = new File(fileName);
BufferedReader br = null;
List<String> list = new ArrayList<String>();
try{
String str = null;
br = new BufferedReader(new InputStreamReader(new FileInputStream(file),"GBK"));
while((str = br.readLine()) != null){
list.add(str);//把有值的对象添加到集合
}
}catch(Exception e){
e.getMessage();
}finally{
if(br != null){
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return list;
}
}
测试类:
说明:世界国家集.txt:是来自与http://country.911cha.com/ 网站的国家名成;
如图:
package com.getcount;
import java.util.List;
/**
* @ClassName: WordNationalFlag
* @Description:java爬取世界国旗
* @author lhz
* @date 2018年7月9日 下午10:47:23
*/
public class TestWordNationalFlag {
public static void main(String[] args) {
String fileName = "src/世界国家集.txt";
List<String> list = WordNationalFlag.readyFileByLines(fileName);
for(String country : list){
String page = WordNationalFlag.doPost(country);
if(page.indexOf("html") >= 0){
WordNationalFlag.getConnection(page);
}
}
System.out.println("国旗下载完毕");
}
}
最后得到的图片:
java抓取世界国家国旗相关推荐
- java抓取网站数据
java 抓取网站数据 假设你需要获取51job 人才网上java 人才的需求数量,首先你需要分析51job 网站的搜索这 一块是怎么运作的,通过解析网页的源代码,我们发现了以下一些信息: 1. 搜索 ...
- java 抓取网页乱码_java抓取网页乱码问题的处理
今天同事做了一个我们感觉很牛B的彩票预测程序,采用的是遗传算法实现,于是我"剽"来学习先,但是部署到我电脑上以后,就有问题了: 1.用她的抓取程序得到的网页内容出现乱码,导致数据无 ...
- java抓取网页内容
今天做项目时用到java抓取网页内容,本以为很简单的一件事但是还是让我蛋疼了一会,网上资料一大堆但是都是通过url抓取网页内容,但是我要的是读取本地的html页面内容的方法,网上找不到怎么办我瞬间了! ...
- Java抓取起点小说输出到本地文件夹和数据库
Java抓取起点小说输出到本地文件夹和数据库 目录 项目结构 所需插件 项目代码 输出结果 目录 项目结构 第一次写网络爬虫,参考了别人的,也自己理解了用法 所需插件 因为使用了mevan,直接上po ...
- java抓取网页标题内容_[Java教程]java 网页页面抓取标题和正文
[Java教程]java 网页页面抓取标题和正文 0 2014-07-10 09:01:30 import java.io.BufferedReader;import java.io.IOExcept ...
- java抓取网页或者文件的邮箱号码
抓文件的 package reg;import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io ...
- Java抓取网页数据(原网页+Javascript返回数据)
转载请注明出处! 原文链接:http://blog.csdn.net/zgyulongfei/article/details/7909006 有时候因为种种原因,我们须要採集某个站点的数据,但因为不同 ...
- java抓取百度搜索结果_java实现抓取百度对某站点搜索结果
htmlunit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容.项目可以模拟浏览器运行,被誉为java浏览器的开源实现.这个没有界面的浏览器,运行速度 ...
- java抓取网页数据_实现网络图片爬虫,只需5秒快速把整个网页上的图片全下载打包zip...
我们经常需要用到互联网上的一些共享资源,图片就是资源的一种,怎么把网页上的图片批量下载下来?有时候我们需要把网页上的图片下载下来,但网页上图片那么多,怎么下载我们想要的东西呢,如果这个网页都是我们想要 ...
最新文章
- 高级转录组分析和R语言数据可视化第十三期 (线上线下同时开课)
- Altium Designer Exception ESocketError in module X2.EXE at 001B15CF (10107) on API 'Socket'
- python format
- the little schemer 笔记(7)
- 学习响应式BootStrap来写融职教育网站,Bootsrtap第十一天Dplayer播放器
- 分布式部署携程Apollo构建配置中心
- 3399 mysql_手动安装 mysql
- 理解SQL Server中的权限体系(下)----安全对象和权限
- 微课|中学生可以这样学Python(5.6.1节):列表推导式2
- hadoop 集群间数据迁移
- 原生mysql启动_单实例MySQL的启动和关闭的方法
- iOS网络请求下来的数据显示时出现的问题
- asp.net 配置 X-Frame-Options
- PostgreSQL 优化器入门
- WPF老矣,尚能饭否——且说说WPF今生未来(下):安心
- 2021年茶艺师(初级)考试题库及茶艺师(初级)考试技巧
- 漏洞复现:DNS 缓存投毒的经典—— 2008年 kaminsky 漏洞
- 为什么我说低代码是“行业毒瘤”?
- ireport 5.6.0 添加 Conditional Style 动态加粗字体
- 为什么必须了解云原生?!
热门文章
- 利用历史数据做商业预测的全过程
- C++学习记录 实验1 CMatrix类设计与实现
- 嵌入式相关问题记录concerto.mak
- 给apk加system权限
- JS滚轮事件(mousewheel/DOMMouseScroll)了解 (转载)
- 剪切板是计算机系统,剪切板
- 信息科学与计算机课件,2015计算机应用基础WIN7+OFFICE2010(南大版)课件:信息科学与计算机.ppt...
- Mysql之--------------------多表查询(内连接 左外连接 右外连接)常见的数据库函数
- 使用XSHELL连接中标麒麟系统
- HTML5七夕情人节表白网页制作【结婚倒计时】HTML+CSS+JavaScript html生日快乐祝福网页制作