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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Python

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

1回答

654閲覧

スクレイピングの仕組みについて

Michiko

総合スコア8

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Python

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2022/08/11 02:56

編集2022/12/24 05:29

前提

visual studio 2022
python 3.9

実現したいこと

初心者の質問で恐縮ですが、よろしくお願いいたします。
Yahoo!ニュースの画像を取得する
https://news.yahoo.co.jp/

該当のソースコード

python

1import requests 2from bs4 import BeautifulSoup 3from pathlib import Path 4import urllib 5import time 6 7load_url = "https://news.yahoo.co.jp/" 8html = requests.get(load_url) 9soup = BeautifulSoup(html.content, "html.parser") 10 11out_folder = Path("download2") 12out_folder.mkdir(exist_ok = True) 13 14 15for element in soup.find_all("a"): 16 href = element.get("href") 17 image_url = urllib.parse.urljoin(load_url,href) 18 imgdata = requests.get(image_url) 19 filename = image_url.split("/")[-1] 20 out_path = out_folder.joinpath(filename) 21 22with open(out_path, mode ="wb")as f: 23 f.write(imgdata.content) 24 25time.sleep(1) 26

エラー内容

エラーの場所:

python

1with open(out_path, mode ="wb")as f: 2 f.write(imgdata.content)

Permission denied: 'download2'
download2のフォルダに画像を書き出す部分でエラーが出ています。

試したこと

1.out_path が機能しているかの確認

python

1import requests 2from bs4 import BeautifulSoup 3from pathlib import Path 4import urllib 5import time 6 7load_url = "https://news.yahoo.co.jp/" 8html = requests.get(load_url) 9soup = BeautifulSoup(html.content, "html.parser") 10 11out_folder = Path("download2") 12out_folder.mkdir(exist_ok = True) 13 14 15for element in soup.find_all("a"): 16 href = element.get("href") 17 image_url = urllib.parse.urljoin(load_url,href) 18 imgdata = requests.get(image_url) 19 filename = image_url.split("/")[-1] 20 out_path = out_folder.joinpath(filename) 21 print(out_path) 22time.sleep(1)

結果

download2 download2 download2 download2\registration?.intl=jp&.done=https%3A%2F%2Fnews.yahoo.co.jp%2F&.src=news download2\login?.src=news&lg=jp&.intl=jp&.done=https%3A%2F%2Fnews.yahoo.co.jp%2F download2\me download2\purchase download2\blocked-users download2 download2\flash download2\live download2 download2 download2 download2\news download2\paidnews?source=pc-common-glonav download2 download2\domestic download2\world download2\business download2\entertainment download2\sports download2\it download2\science download2\life download2\local download2\top-picks download2\noscript download2\6435317 download2\6435324 download2\6435315 download2\6435316 download2\6435319 download2\6435312 download2\6435320 download2\6435323 download2\top-picks download2\topics download2\6435324 download2\news download2\5a62e7da42676b7f53169730575362670d53d278 download2\2096765afdfa0c549547a6c34d941443e86f47f7 download2\81c4d2b3b65c4ef8e195086cbe34ec8ee991acb9 download2\96db5d93fd476ff34c552e31c44e727389df05ad download2\af8583038251799df558f129c04b705c78ee03e2 download2\comment download2\81c4d2b3b65c4ef8e195086cbe34ec8ee991acb9 download2\17429c5dc24db6f31128f5cd5e61db880497ef1e download2\441a5d77ec1dabf6261e3b2d50e1eec4d9681ae5 download2\172464ff295002de132035120c83bfd6c59aae40 download2\f3a0b5804300fabf8888b4f9807b0a58b276d2f4 download2\b2916c23d491141a36c3959618e0fba8b3c8290c download2\magazine download2\529e5b6339042bd8ad8ba4456fb773f57679381a download2\f7deb73abb43793cd549ec1f31efc40cd4a9e2b5 download2\1750ed3b9c7e60022ae988d22dd4d7af1872abd2 download2\8ea34cec762f0f2512bd07a375101a33704d7f10 download2\f0efb5faacdf85b965414892deb19d7b47f8aabf download2 download2\yjnews download2\YahooNewsTopics download2 download2 download2\flash download2\live download2 download2 download2 download2\news download2\paidnews download2\rss download2\media download2 download2 download2 download2\news-operation-policy download2\H000006460 download2\commercial-transactions download2\news download2

2.他のサイトで試す
https://www.elle.com/jp/decor/decor-architecture/g27036488/kumakengo-19-0405/?slide=1

python

1import requests 2from bs4 import BeautifulSoup 3from pathlib import Path 4import urllib 5import time 6 7load_url = "https://www.elle.com/jp/decor/decor-architecture/g27036488/kumakengo-19-0405/" 8html = requests.get(load_url) 9soup = BeautifulSoup(html.content, "html.parser") 10 11out_folder = Path("download2") 12out_folder.mkdir(exist_ok = True) 13 14 15for element in soup.find_all("img"): 16 src = element.get("src") 17 image_url = urllib.parse.urljoin(load_url,src) 18 imgdata = requests.get(image_url) 19 filename = image_url.split("/")[-1] 20 out_path = out_folder.joinpath(filename) 21 print(out_path) 22 23with open(out_path, mode ="wb")as f: 24 f.write(imgdata.content) 25 26time.sleep(1) 27

エラー場所
imgdata = requests.get(image_url)
内容
Message=No connection adapters were found for 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'
Source=C:\Users\Michiko\Desktop\app2\scraping\scraping\scraping.py

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

  1. urllib.parse がインポートできてません。imort urllib ではなく、import urllib.parse としてインポートすれば、urllib.parse.urljoin() が使えます。
  2. 全ての a タグの href attribute が画像の URL とは限りません。
  3. 今回 load_url で定義されている URL 先の画像コンテンツは、source タグで指定されていました。
  4. ファイルが書き込めないのは、Windows のファイルシステムとして不正な文字列が含まれているからだと思います。

投稿2022/12/23 13:07

編集2022/12/23 20:29
Demerara

総合スコア392

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問