質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

828閲覧

python スクレイピング

NxfKx

総合スコア0

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/10/20 06:30

Python

1```~~~~ 2コード 3```### 実行でき、画像をフォルダに保存したい 4 5 6### 発生している問題・エラーメッセージ 7

エラーメッセージ

ValueError

1<ipython-input-21-d8a8b95d4d3a> in <module> 2 2 3 3 print (idx+1,plant) 4----> 4 weblio_scraping(plant) 5 5 time.sleep(3) 6 7<ipython-input-20-6a18939f70df> in weblio_scraping(keyword) 8 5 reader = csv.reader(f) 9 6 created_folders = {} 10----> 7 for row in reader: 11 8 hierarchy_list = row[0].split('-') 12 9 name = row[1] 13 14ValueError: I/O operation on closed file. 15 16 17 18### 該当のソースコード 19 20```言語 python 21ソースコード 22```from bs4 import BeautifulSoup 23import requests 24import pandas as pd 25import time 26import csv 27import os 28 29plant_list = [] 30 31with open("plant_list.txt", encoding='utf_8') as f: 32 for plant in f.readlines(): 33 plant_list.append(plant.rstrip('\n')) 34 35plant_list 36 37def weblio_scraping(keyword): 38 39 # ① keywordでフォルダ作成 40 with open("plant_list.txt", encoding='utf_8') as f: 41 reader = csv.reader(f) 42 created_folders = {} 43 for row in reader: 44 hierarchy_list = row[0] 45 name = row[1] 46 if len(hierarc) == 1: 47 if not os.path.exists(name): 48 os.mkdir(f"img/{name}") 49 created_folders[row[0]] = name 50 continue 51 52 53 # ② スクレイピング 54 url = 'https://www.weblio.jp/content/{}'.format(keyword) 55 source = requests.get(url) 56 source.encoding = source.apparent_encoding 57 soup = BeautifulSoup(source.text,'html.parser') 58 59 # ③ 植物図鑑検索 60 plant_dictionary = soup.select("div.pbarT div.pbarTLW div.pbarTL a[title=植物図鑑]") 61 62 # 空の配列検索 63 if plant_dictionary: 64 65 # 植物図鑑があるやつのみ、imgタグ収集 66 for url in soup.find_all('img'): 67 68 # URL表示 69 print (url.get('src')) 70 71 # ④ URLから画像取得し、①のフォルダ内に保存する 72 73 url = 'https://www.weblio.jp/content/{}'.format(keyword) 74 file_name = "保存したいファイル名.jpg" 75 76 response = requests.get(url) 77 image = response.content 78 79 with open(file_name, "wb") as aaa: 80 plant.write(img) 81 82### 試したこと 83 84ここに問題に対して試したことを記載してください。 85 86### 補足情報(FW/ツールのバージョンなど) 87# ① keywordでフォルダ作成 88# ④ URLから画像取得し、①のフォルダ内に保存する 89以上の2つを修正していただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

インデントの誤りでしょう。
ソースをマークダウンで載せられていないので確実なことは言えませんが、

python

1def weblio_scraping(keyword): 2 with open("plant_list.txt", encoding='utf_8') as f: 3 reader = csv.reader(f) 4 created_folders = {} 5 for row in reader: 6 hierarchy_list = row[0] 7 name = row[1] 8 if len(hierarc) == 1: 9 if not os.path.exists(name): 10 os.mkdir(f"img/{name}") 11 created_folders[row[0]] = name 12 continue

のように

python

1 for row in reader:

がこの場所のインデントだと、fがクローズされているので、
ValueError: I/O operation on closed file.
となります。

より確実な回答が欲しければ、マークダウン記法を使ってソースのインデントがわかるようにしてください。

マークダウン記法の使いかたはteratail初心者で、質問もまだ2回目で、質問欄にソースコード載せる場合、<code>を押してからどのように書くかを、教えて欲しいです。を読んでください。

投稿2021/10/20 08:57

編集2021/10/20 09:01
ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問