取得したHTMLから画像リンクだけを抽出する。
これはリンクを抽出をした場合とほぼ一緒。aタグかimgタグかだけの違い。
var client = require('cheerio-httpcli'); var URL = require('url'); var url = "http://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%8C"; var param = {}; /** * client.fetch:指定されたURLからHTMLを取得する * コールバックfunction: * err:エラー情報 * $:取得データ * res:サーバレスポンス */ client.fetch(url, param, function(err, $, res){ if(err){ console.log("Error", err); return; } $("img").each(function(idx){ var src = $(this).attr('src'); console.log(src); }); });
結果はこんな感じで上手く取得できた。
//upload.wikimedia.org/wikipedia/commons/thumb/5/5f/Disambig_gray.svg/25px-Disambig_gray.svg.png //upload.wikimedia.org/wikipedia/commons/thumb/e/e3/Coat_types_3.jpg/240px-Coat_types_3.jpg //upload.wikimedia.org/wikipedia/commons/thumb/a/a1/Samoyed_600.jpg/180px-Samoyed_600.jpg //upload.wikimedia.org/wikipedia/commons/thumb/5/52/Rousou1.jpg/120px-Rousou1.jpg //upload.wikimedia.org/wikipedia/commons/thumb/9/91/Shiba_inu_zad_rybnik-kamien_pl.jpg/120px-Shiba_inu_zad_rybnik-kamien_pl.jpg //upload.wikimedia.org/wikipedia/commons/thumb/a/af/Golden_retriever_eating_pigs_foot.jpg/200px-Golden_retriever_eating_pigs_foot.jpg //upload.wikimedia.org/wikipedia/commons/thumb/b/b3/Shiba_inu_profile_01.jpg/200px-Shiba_inu_profile_01.jpg //upload.wikimedia.org/wikipedia/commons/thumb/0/00/Shiba_inu_eyes.jpg/200px-Shiba_inu_eyes.jpg //upload.wikimedia.org/wikipedia/commons/thumb/a/a1/Canine_reproduction.jpg/200px-Canine_reproduction.jpg //upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Pregnant_female_dog_bitch_mongrel_Jan_2008_Shot_in_Jalandhar_Punjab_India_by_gopal1035_017.jpg/200px-Pregnant_female_dog_bitch_mongrel_Jan_2008_Shot_in_Jalandhar_Punjab_India_by_gopal1035_017.jpg //upload.wikimedia.org/wikipedia/commons/thumb/a/ae/Wilde_huendin_am_stillen.jpg/200px-Wilde_huendin_am_stillen.jpg //upload.wikimedia.org/wikipedia/commons/thumb/e/eb/Shiba_inu_Boston_Terrier_greetings.jpg/200px-Shiba_inu_Boston_Terrier_greetings.jpg //upload.wikimedia.org/wikipedia/commons/thumb/c/c6/Tesem.jpg/200px-Tesem.jpg //upload.wikimedia.org/wikipedia/commons/thumb/d/da/%E7%8A%AC-oracle.svg/26px-%E7%8A%AC-oracle.svg.png //upload.wikimedia.org/wikipedia/commons/thumb/2/21/Dog_-_Hata_Rokurozaemon_with_his_dog.jpg/150px-Dog_-_Hata_Rokurozaemon_with_his_dog.jpg //upload.wikimedia.org/wikipedia/commons/thumb/e/ec/Grande_Boucherie_Canine_a_Paris.jpg/220px-Grande_Boucherie_Canine_a_Paris.jpg //upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Boldini_-_Madame_Rejane.jpg/215px-Boldini_-_Madame_Rejane.jpg //upload.wikimedia.org/wikipedia/commons/thumb/8/87/Jomon_People_and_Jomon_Dog.jpg/180px-Jomon_People_and_Jomon_Dog.jpg //upload.wikimedia.org/wikipedia/commons/thumb/0/02/Inu_ou_mono00.jpg/250px-Inu_ou_mono00.jpg //upload.wikimedia.org/wikipedia/commons/thumb/d/d9/Tsunyaoshi.jpg/250px-Tsunyaoshi.jpg //upload.wikimedia.org/wikipedia/commons/thumb/5/52/Border_Collie_sheepdog_trial.jpg/260px-Border_Collie_sheepdog_trial.jpg //upload.wikimedia.org/wikipedia/commons/thumb/b/b1/Defense.gov_News_Photo_120318-M-MM918-007_-_U.S._Marine_Lance_Cpl._Evan_Frickey_a_dog_handler_with_3rd_Marine_Regiment_plays_with_Cookie_an_improvised_explosive_device_detection_dog_while.jpg/250px-thumbnail.jpg //upload.wikimedia.org/wikipedia/commons/thumb/5/5f/Dog_attack_%28USAF%29.jpg/220px-Dog_attack_%28USAF%29.jpg //upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Wikiquote-logo.svg/34px-Wikiquote-logo.svg.png //upload.wikimedia.org/wikipedia/commons/thumb/f/f2/Edit-clear.svg/40px-Edit-clear.svg.png //upload.wikimedia.org/wikipedia/commons/thumb/8/89/Labrador_Retriever_babies.jpg/250px-Labrador_Retriever_babies.jpg //upload.wikimedia.org/wikipedia/commons/9/91/Dog_galloping.gif //upload.wikimedia.org/wikipedia/commons/thumb/f/f9/Wiktionary_small.svg/25px-Wiktionary_small.svg.png //upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Wikibooks-logo.svg/23px-Wikibooks-logo.svg.png //upload.wikimedia.org/wikipedia/commons/thumb/4/4c/Wikisource-logo.svg/24px-Wikisource-logo.svg.png //upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/22px-Commons-logo.svg.png //upload.wikimedia.org/wikipedia/commons/thumb/2/24/Wikinews-logo.svg/27px-Wikinews-logo.svg.png //upload.wikimedia.org/wikipedia/commons/thumb/9/91/Wikiversity-logo.svg/25px-Wikiversity-logo.svg.png //upload.wikimedia.org/wikipedia/commons/thumb/f/ff/Wikidata-logo.svg/25px-Wikidata-logo.svg.png //upload.wikimedia.org/wikipedia/commons/thumb/d/df/Wikispecies-logo.svg/25px-Wikispecies-logo.svg.png //ja.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1 /static/images/wikimedia-button.png /static/1.27.0-wmf.5/resources/assets/poweredby_mediawiki_88x31.png
画像の一括ダウンロード
しかし、これも画像ファイルが相対パスなので絶対パスへ変更してあげる。
変更後、これらをすべて一括でダウンロードしてみる。
その時requestモジュールがあると便利なのでインストールしておく。
# /usr/local/node/bin/npm install request request@2.65.0 ../../node_modules/request ├── aws-sign2@0.6.0 ├── forever-agent@0.6.1 ├── tunnel-agent@0.4.1 ├── caseless@0.11.0 ├── oauth-sign@0.8.0 ├── stringstream@0.0.5 ├── isstream@0.1.2 ├── json-stringify-safe@5.0.1 ├── extend@3.0.0 ├── tough-cookie@2.2.0 ├── node-uuid@1.4.3 ├── qs@5.2.0 ├── combined-stream@1.0.5 (delayed-stream@1.0.0) ├── mime-types@2.1.7 (mime-db@1.19.0) ├── form-data@1.0.0-rc3 (async@1.5.0) ├── http-signature@0.11.0 (assert-plus@0.1.5, ctype@0.5.3, asn1@0.1.11) ├── hawk@3.1.1 (cryptiles@2.0.5, boom@2.10.1, sntp@1.0.9, hoek@2.16.3) ├── bl@1.0.0 (readable-stream@2.0.4) └── har-validator@2.0.2 (pinkie-promise@1.0.0, commander@2.9.0, chalk@1.1.1, is-my-json-valid@2.12.3)
ソースはこんな感じ、ドメイン以降のパスは_に置換して保存するようにしている。
var client = require('cheerio-httpcli'); var URL = require('url'); var fs = require('fs'); var request = require('request'); var savedir = __dirname + "/img"; if(!fs.existsSync(savedir)){ fs.mkdirSync(savedir); } var url = "http://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%8C"; var param = {}; /** * client.fetch:指定されたURLからHTMLを取得する * コールバックfunction: * err:エラー情報 * $:取得データ * res:サーバレスポンス */ client.fetch(url, param, function(err, $, res){ if(err){ console.log("Error", err); return; } $("img").each(function(idx){ var src = $(this).attr('src'); src = URL.resolve(url, src); var fname = URL.parse(src).pathname; fname = savedir + "/" + fname.replace(/[^a-zA-Z0-9\.]+/g, '_'); request(src).pipe(fs.createWriteStream(fname)); console.log(src); }); });
これで実行ディレクトリ配下にimgフォルダを作成して、そのフォルダにダウンロードした画像が保存される。
_static_1.27.0_wmf.5_resources_assets_poweredby_mediawiki_88x31.png _static_images_wikimedia_button.png _wiki_Special_CentralAutoLogin_start _wikipedia_commons_9_91_Dog_galloping.gif _wikipedia_commons_thumb_0_00_Shiba_inu_eyes.jpg_200px_Shiba_inu_eyes.jpg _wikipedia_commons_thumb_0_02_Inu_ou_mono00.jpg_250px_Inu_ou_mono00.jpg _wikipedia_commons_thumb_1_1e_Pregnant_female_dog_bitch_mongrel_Jan_2008_Shot_in_Jalandhar_Punjab_India_by_gopal1035_017.jpg_200px_Pregnant_female_dog_bitch_mongrel_Jan_2008_Shot_in_Jalandhar_Punjab_India_by_gopal1035_017.jpg _wikipedia_commons_thumb_2_21_Dog_Hata_Rokurozaemon_with_his_dog.jpg_150px_Dog_Hata_Rokurozaemon_with_his_dog.jpg _wikipedia_commons_thumb_2_24_Wikinews_logo.svg_27px_Wikinews_logo.svg.png _wikipedia_commons_thumb_4_4a_Commons_logo.svg_22px_Commons_logo.svg.png _wikipedia_commons_thumb_4_4c_Wikisource_logo.svg_24px_Wikisource_logo.svg.png _wikipedia_commons_thumb_5_52_Border_Collie_sheepdog_trial.jpg_260px_Border_Collie_sheepdog_trial.jpg _wikipedia_commons_thumb_5_52_Rousou1.jpg_120px_Rousou1.jpg _wikipedia_commons_thumb_5_5f_Disambig_gray.svg_25px_Disambig_gray.svg.png _wikipedia_commons_thumb_5_5f_Dog_attack_28USAF_29.jpg_220px_Dog_attack_28USAF_29.jpg _wikipedia_commons_thumb_8_87_Jomon_People_and_Jomon_Dog.jpg_180px_Jomon_People_and_Jomon_Dog.jpg _wikipedia_commons_thumb_8_89_Labrador_Retriever_babies.jpg_250px_Labrador_Retriever_babies.jpg _wikipedia_commons_thumb_9_91_Shiba_inu_zad_rybnik_kamien_pl.jpg_120px_Shiba_inu_zad_rybnik_kamien_pl.jpg _wikipedia_commons_thumb_9_91_Wikiversity_logo.svg_25px_Wikiversity_logo.svg.png _wikipedia_commons_thumb_9_9a_Boldini_Madame_Rejane.jpg_215px_Boldini_Madame_Rejane.jpg _wikipedia_commons_thumb_a_a1_Canine_reproduction.jpg_200px_Canine_reproduction.jpg _wikipedia_commons_thumb_a_a1_Samoyed_600.jpg_180px_Samoyed_600.jpg _wikipedia_commons_thumb_a_ae_Wilde_huendin_am_stillen.jpg_200px_Wilde_huendin_am_stillen.jpg _wikipedia_commons_thumb_a_af_Golden_retriever_eating_pigs_foot.jpg_200px_Golden_retriever_eating_pigs_foot.jpg _wikipedia_commons_thumb_b_b1_Defense.gov_News_Photo_120318_M_MM918_007_U.S._Marine_Lance_Cpl._Evan_Frickey_a_dog_handler_with_3rd_Marine_Regiment_plays_with_Cookie_an_improvised_explosive_device_detection_dog_while.jpg_250px_thumbnail.jpg _wikipedia_commons_thumb_b_b3_Shiba_inu_profile_01.jpg_200px_Shiba_inu_profile_01.jpg _wikipedia_commons_thumb_c_c6_Tesem.jpg_200px_Tesem.jpg _wikipedia_commons_thumb_d_d9_Tsunyaoshi.jpg_250px_Tsunyaoshi.jpg _wikipedia_commons_thumb_d_da_E7_8A_AC_oracle.svg_26px_E7_8A_AC_oracle.svg.png _wikipedia_commons_thumb_d_df_Wikispecies_logo.svg_25px_Wikispecies_logo.svg.png _wikipedia_commons_thumb_e_e3_Coat_types_3.jpg_240px_Coat_types_3.jpg _wikipedia_commons_thumb_e_eb_Shiba_inu_Boston_Terrier_greetings.jpg_200px_Shiba_inu_Boston_Terrier_greetings.jpg _wikipedia_commons_thumb_e_ec_Grande_Boucherie_Canine_a_Paris.jpg_220px_Grande_Boucherie_Canine_a_Paris.jpg _wikipedia_commons_thumb_f_f2_Edit_clear.svg_40px_Edit_clear.svg.png _wikipedia_commons_thumb_f_f9_Wiktionary_small.svg_25px_Wiktionary_small.svg.png _wikipedia_commons_thumb_f_fa_Wikibooks_logo.svg_23px_Wikibooks_logo.svg.png _wikipedia_commons_thumb_f_fa_Wikiquote_logo.svg_34px_Wikiquote_logo.svg.png _wikipedia_commons_thumb_f_ff_Wikidata_logo.svg_25px_Wikidata_logo.svg.pngこんな感じ。うまいこといった。
0 件のコメント:
コメントを投稿