画像スクレイビングを用いて、写真をダウンロードしたいです。
以下のURLを参考にしました。
https://webdirector-blog.com/c_3/p_38/
以下のURL上のコードでは無事に、女性の写真をDLすることができたのですが
URLだけを変更しても、
写真をDLすることができず、ファイルが大量にできただけでした。
どのようにすればよいのでしょうか
import os import bs4 import time import random import urllib.request from itertools import chain base_url = 'https://search.yahoo.co.jp/image/search?p=%E7%8A%AC&oq=&ei=UTF-8&save=0' def fetch_page_urls(int, page): page_path = '/CSP/bt/hairCatalogSearch/ladys/condtion/?lengthCd=HL0'+str(int)+'&pn='+str(page) html = urllib.request.urlopen('{}{}'.format(base_url, page_path)) soup = bs4.BeautifulSoup(html, 'html.parser') columns = soup.find_all('li', class_='dibBL') atags = map(lambda column: column.find_all('a', class_='pr'), columns) with open('hotpepper_page_urls_type'+str(int)+'.txt', 'w') as f: for _ in chain.from_iterable(atags): path = _.get('href') if not path.startswith('https'): # Relative path path = '{}{}'.format(base_url, path) if path[-1] == '/': # Normalize path = path[:-1] f.write('{}\n'.format(path)) def fetch_photos(int, page): with open('hotpepper_page_urls_type'+str(int)+'.txt') as f: # Make directories for saving images dirpath = 'photos/inu/lenHL0'+str(int)+'/'+str(page) # ファイルの存在確認 if os.path.isfile('{}/{}'.format(dirpath, '40.jpg')) == True: print('すでに取得済') return False # ディレクトリの存在確認 if os.path.isdir(dirpath) == False: os.makedirs(dirpath) num = 1 #imgのURLを取得 for url in f: html = urllib.request.urlopen(url.strip()) soup = bs4.BeautifulSoup(html, 'html.parser') photos = soup.select("div.pr img.bdImgGray") # photos = soup.find_all('div', class_='fl') paths = map(lambda path: path.get('src'), photos) #フォルダ保存 for path in paths: filepath = '{}/{}'.format(dirpath, str(num)+'.jpg') # Download image file urllib.request.urlretrieve(path, filepath) num = num +1 # Add random waiting time (4 - 6 sec) time.sleep(1 + random.randint(0, 2)) if __name__ == '__main__': for type in range(5, 6): for page in range(1, 101): print('type='+str(type)+'&page='+str(page)) fetch_page_urls(type, page) fetch_photos(type, page)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。