2019年11月17日日曜日

開発環境

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング (Al Sweigart(著)、相川 愛三(翻訳)、オライリージャパン)の第Ⅱ部(処理の自動化)、11章(Webスクレイピング)、11.10(演習プロジェクト)、11.10.2(画像サイトダウンローダー)の解答を求めてみる。

コード

#!/usr/bin/env python3
import requests
import bs4
import sys
import os
import re

print('11.10.2')
keywords = sys.argv[1:]
url = f'https://www.flickr.com/search/?text={" ".join(keywords)}'
res = requests.get(url)
res.raise_for_status()
bs = bs4.BeautifulSoup(res.text, 'lxml')
divs = bs.select('.photo-list-photo-view')
dirname = f'image_{"_".join(keywords)}'
os.mkdir(dirname)
os.chdir(dirname)
regexp = re.compile(r'url\((.*)\)')

for div in divs:
    div_style = div.get('style')
    m = regexp.search(div_style)
    url = f'https:{m.group(1)}'
    filename = os.path.basename(url)
    res_image = requests.get(url)
    res_image.raise_for_status()
    with open(filename, 'wb') as f:
        for chunk in res_image.iter_content(100000):
            f.write(chunk)

入出力結果(Zsh、cmd.exe(コマンドプロンプト)、Terminal、Jupyter(IPython))

% ./sample16.py cat dog animal
11.10.2
% ls image_cat_dog_animal 
./    30490197172_772a4c6f02_m.jpg
../    30519093851_16fe82ae7c_n.jpg
1937590_391f7858d3_m.jpg 31387832713_7936976311_n.jpg
22754051576_e9c0325885_n.jpg 3433057045_11f4bde931_m.jpg
24502042402_6b974b6353_m.jpg 36423975484_3c290e1816_m.jpg
26223813911_688ae7d991_n.jpg 4357387463_ef82859cb6_n.jpg
26536492573_38ddb05cf2_n.jpg 44233629092_5dd773e884_n.jpg
29261153837_2a0f71c276_m.jpg 44263587125_bf464d67c1_n.jpg
29345929047_6b49c10871_n.jpg 44282449621_618430162a_n.jpg
29682703077_cfe5a89357_n.jpg 46797184892_b418e110b2_w.jpg
29927392527_ae085994ed_n.jpg 6190779469_2e1b26765e_n.jpg
30180474847_aee9a726f1_n.jpg
% open image_cat_dog_animal/*.jpg
% ./sample16.py cat              
11.10.2
% ls image_cat
./    32711702733_7cdd9dbb3a_m.jpg
../    39256672581_c48569e3a2_n.jpg
11991979753_eac1d33dd8_n.jpg 4051998735_5b4863ac11_m.jpg
13545844805_170ec3746b_m.jpg 41291335934_658fde3322_n.jpg
14284324148_360ae173b8_m.jpg 41676479745_ae6d27ee9d_n.jpg
14934282524_344c84246b_n.jpg 46550224945_577b036632_n.jpg
14934292534_32b0302f2d_m.jpg 5508784414_d2d84f9c92_m.jpg
15171599148_6ef1d09dab_n.jpg 6828049582_499de13cfb_w.jpg
16386660144_a6c4026657_n.jpg 6843831417_861d6996e8_n.jpg
16393044637_72e93d96b6_n.jpg 7190755946_ea97e85765_n.jpg
175237265_029f7974a2_n.jpg 8168159947_94b3a89a2a_n.jpg
25690386427_8c2b3eaf76_n.jpg
% open image_cat/*.jpg
% ./sample16.py dog   
11.10.2
% ls image_dog 
./    34953871486_b3f14bf0d3_n.jpg
../    40882481714_42c7d4e062_n.jpg
12503570275_f04761135b_m.jpg 4489119695_87144ba60b_n.jpg
15131237412_268a1e41a3_m.jpg 44926777104_8a6e553a48_m.jpg
20081037129_a0dd2d9067_n.jpg 4846208207_eb7d525741_m.jpg
27585811288_797a384807_n.jpg 5338762379_59f7435b93_m.jpg
30921555414_ccc9105f99_n.jpg 5340131446_3b7c380bea_m.jpg
31964411303_4b42b64d18_m.jpg 5341518498_c7f8cb5274_n.jpg
32355788862_a53889c5a6_n.jpg 5395084891_07c9272b37_w.jpg
32598752764_b62a07cf43_m.jpg 6872928870_69a00123b5_m.jpg
33336453970_5e0213d5b5_n.jpg 7012277475_7e126fd8b6_n.jpg
33659529142_788cf750f0_n.jpg 8299709853_fc69615369_m.jpg
% open image_dog/*.jpg
% 

0 コメント:

コメントを投稿