亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Java爬蟲之下載全世界國家的國旗圖片

YancyYe / 2625人閱讀

摘要:介紹本篇博客將繼續(xù)上一篇博客爬蟲之使用的模塊爬取各國國旗的內(nèi)容,將用來實(shí)現(xiàn)這個(gè)爬蟲,下載全世界國家的國旗圖片。

介紹

??本篇博客將繼續(xù)上一篇博客:Python爬蟲之使用Fiddler+Postman+Python的requests模塊爬取各國國旗 的內(nèi)容,將用Java來實(shí)現(xiàn)這個(gè)爬蟲,下載全世界國家的國旗圖片。項(xiàng)目不再過多介紹,具體可以參考上一篇博客。
??我們將全世界國家的名稱放在一個(gè)txt文件中,每一行一個(gè)國家名字,該文件位于E盤flag目錄下,名稱為countries.txt, 部分內(nèi)容如下:

爬蟲程序

??我們這個(gè)爬蟲的思路還是和上一篇博客的思路一樣:先是讀取countries.txt中的國家名稱,以國家名稱為參數(shù),讀取該國家搜索后的所在網(wǎng)頁,再找到該搜索網(wǎng)頁中的國家的國旗圖片,并實(shí)現(xiàn)下載。這個(gè)搜索的過程,我們可以用Java的URL包中的POST方法來實(shí)現(xiàn),關(guān)于POST方法的請求頭和請求體,可以用Fiddler工具進(jìn)行抓包分析。
??該Java項(xiàng)目的具體結(jié)構(gòu)如下:

其中用到的第三方API為commons-io和Jsoup,主函數(shù)為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 countries = readFileByLines(fileName);
        
        for(String country: countries) {
            String page = doPost(country); // 獲取國家所在的網(wǎng)頁
            if (page.indexOf("html") >= 0) { // 獲取成功
                getContent(page);            // 下載該國國家的國旗
            }
        }
        
        System.out.println("國旗下載完畢!");
        
    }

    /* 發(fā)送HTTP的POST請求,獲取指定國家的網(wǎng)頁地址
     * 傳入?yún)?shù):country(國家): String類型
     */
    public static String doPost(String country){

        String url = "http://country.911cha.com/";

        try {
            // 設(shè)置網(wǎng)址,打開連接
            URL obj = new URL(url);
            HttpURLConnection conn = (HttpURLConnection) obj.openConnection();
            
            // 設(shè)置POST請求頭和請求體,請求體的參數(shù)為國家(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請求體的參數(shù)
            conn.setDoOutput(true);
            OutputStreamWriter os = new OutputStreamWriter(conn.getOutputStream(),"UTF-8");
            os.write(postParams);
            os.flush();
            os.close();
            
            // 獲取響應(yīng)結(jié)果狀態(tài)碼
            int responseCode = conn.getResponseCode();

            if (responseCode == HttpURLConnection.HTTP_OK) { //如果響應(yīng)狀態(tài)碼為200

                // 將HTML內(nèi)容解析成UTF-8格式
                Document doc = Jsoup.parse(conn.getInputStream(), "utf-8", url);
                // 刷選需要的網(wǎng)頁內(nèi)容
                String page = doc.select("div.mcon").get(1)
                                        .selectFirst("ul")
                                        .selectFirst("li")
                                        .selectFirst("a")
                                        .attr("href");
                return page;

            } 
            else { // 如果響應(yīng)狀態(tài)碼不是200, 則返回"Get page failed!"
                return "Get page failed.!";
            }
        }
        catch(Exception e){
            return "Get page failed.";
        }
    }
    
    // getContent()函數(shù)主要實(shí)現(xiàn)下載指定國家的國旗
    public static void getContent(String page){
        
        String base_url = "http://country.911cha.com/";
        String url = base_url+page;
        
        try{
            // 利用URL解析網(wǎng)址
            URL urlObj =  new URL(url);
            // URL連接
            URLConnection urlCon = urlObj.openConnection(); // 打開URL連接
            // 將HTML內(nèi)容解析成UTF-8格式
            Document doc = Jsoup.parse(urlCon.getInputStream(), "utf-8", url);
            // 刷選需要的網(wǎng)頁內(nèi)容
            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()實(shí)現(xiàn)圖片下載
            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, 里面的元素為每個(gè)國家的名稱
    public static ArrayList readFileByLines(String fileName) {  

        File file = new File(fileName);  
        BufferedReader reader = null;  // 設(shè)置reader為null
        ArrayList countries = new ArrayList();

        try {  

            reader = new BufferedReader(new FileReader(file));  
            String tempString = null;  
            
            // 一次讀入一行,直到讀入null為文件結(jié)束  
            while ((tempString = reader.readLine()) != null)
                countries.add(tempString); // 在列表中添加國家名稱
             
            reader.close(); // 關(guān)閉reader
            
            return countries;
        } 
        catch (IOException e) {  
            return countries;  
        } 
        finally {  
            if (reader != null) {  
                try {  
                    reader.close();  
                }
                catch (IOException e1) {  
                    e1.printStackTrace();
                }  

            }  

        }  

    } 
    

}
運(yùn)行結(jié)果

??點(diǎn)擊運(yùn)行該Java程序,可以發(fā)現(xiàn)在E盤的flag目錄下已經(jīng)下載了全世界國家的國旗圖片,查看如下:

??Bingo, 我們的Java爬蟲程序運(yùn)行成功!本次爬蟲的主要目標(biāo)是為了在Java中實(shí)現(xiàn)類似于Python中的requests模塊的POST方法~

注意:本人現(xiàn)已開通兩個(gè)微信公眾號: 因?yàn)镻ython(微信號為:python_math)以及輕松學(xué)會Python爬蟲(微信號為:easy_web_scrape), 歡迎大家關(guān)注哦~~

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/71511.html

相關(guān)文章

  • Python爬蟲使用Fiddler+Postman+Pythonrequests模塊爬取各國國旗

    摘要:流程作為上述過程的一個(gè)演示,我們使用的網(wǎng)址為頁面如下在表單中輸入德國,跳轉(zhuǎn)后的頁面如下我們可以發(fā)現(xiàn),在搜索的結(jié)果中,會出現(xiàn)德國這個(gè)搜索結(jié)果。點(diǎn)擊該搜索結(jié)果,跳轉(zhuǎn)后的頁面如下在這個(gè)頁面中有我們需要的德國的國旗。 介紹 ??本篇博客將會介紹一個(gè)Python爬蟲,用來爬取各個(gè)國家的國旗,主要的目標(biāo)是為了展示如何在Python的requests模塊中使用POST方法來爬取網(wǎng)頁內(nèi)容。??為了知道...

    laoLiueizo 評論0 收藏0
  • 流暢python示例:異步下載國旗圖片

    摘要:異步下載國旗圖片和國家名數(shù)據(jù)用來捕獲異常保存圖片文件負(fù)責(zé)下載的主函數(shù),由傳遞國家名是數(shù)據(jù)。異步獲取圖片異步獲取國家名中的子句在沒有異常時(shí)會運(yùn)行這里獲取循環(huán)是為了在保存圖片時(shí)不阻塞函數(shù)內(nèi)部維護(hù)了一個(gè)對象注。 異步下載國旗圖片和國家名數(shù)據(jù) import aiohttp import asyncio import os import time import sys POP20_CC = (...

    james 評論0 收藏0
  • Python爬蟲足球小將動(dòng)漫(圖片下載

    摘要:本屆世界杯中,在日本與比利時(shí)的比賽中,日本球迷們高舉隊(duì)長小翼的畫面就足以證明這部動(dòng)漫對日本足球的深遠(yuǎn)影響。本文將介紹如何利用爬蟲來下載足球小將的動(dòng)漫圖片。 ??盡管俄羅斯世界杯的熱度已經(jīng)褪去,但這屆世界杯還是給全世界人民留下了無數(shù)難忘的回憶,不知你的回憶里有沒有日本隊(duì)的身影?本次世界杯中,日本隊(duì)的表現(xiàn)讓人眼前一亮,很難想象,就是這樣一只隊(duì)伍,二十幾年還是我們國家足球隊(duì)的水平一樣,也許還...

    tolerious 評論0 收藏0
  • 首次公開,整理12年積累博客收藏夾,零距離展示《收藏夾吃灰》系列博客

    摘要:時(shí)間永遠(yuǎn)都過得那么快,一晃從年注冊,到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...

    Harriet666 評論0 收藏0
  • Java爬蟲多線程下載IMDB中Top250電影圖片

    摘要:本次分享將在此基礎(chǔ)上,利用多線程,提高程序運(yùn)行的效率。思路本次分享建立在博客爬蟲之下載中電影的圖片上,總體的爬蟲思路沒有變化,只是在此基礎(chǔ)上引入多線程。 介紹 ??在博客:Java爬蟲之下載IMDB中Top250電影的圖片中我們實(shí)現(xiàn)了利用Java爬蟲來下載圖片,但是效率不算太高。本次分享將在此基礎(chǔ)上,利用多線程,提高程序運(yùn)行的效率。 思路 ??本次分享建立在博客Java爬蟲之下載IMD...

    wujl596 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<