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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

2回答

770閲覧

Webスクレイピングで必要個所の一部分しか抜き出せない

syu_kuri_mu

総合スコア4

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2021/05/02 13:53

前提・実現したいこと

下記サイトの各店舗の店名、住所、取り扱い商品をスクレイピングしたい。
住所のみでスクレイピングした際は実行できる。

発生している問題・エラーメッセージ

Traceback (most recent call last): File "p:/Programing/Webスクレイピング/ほとけ/main.py", line 41, in <module> ws.cell(row = i, column = 3, value = elem.contents[0]) File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\openpyxl\worksheet\worksheet.py", line 242, in cell cell.value = value File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\openpyxl\cell\cell.py", line 215, in value self._bind_value(value) File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\openpyxl\cell\cell.py", line 184, in _bind_value raise ValueError("Cannot convert {0!r} to Excel".format(value)) ValueError: Cannot convert <i class="fa fa-folder-open"></i> to Excel

該当のソースコード

lang

1import openpyxl as px 2import requests 3from bs4 import BeautifulSoup 4 5book = px.Workbook() 6book.save('shops_info.xlsx') 7ws = book.active 8 9# 電気街南側のアキバ系ショップ 108店舗 10load_url = "http://www.akibakei.info/plist_a.php?ar=%E9%9B%BB%E6%B0%97%E8%A1%97%E5%8D%97%E5%81%B4&pid=49" 11html = requests.get(load_url).text 12soup = BeautifulSoup(html, "html.parser") 13 14shops = soup.find_all("h3") 15adresses = soup.find_all("adress") 16items = soup.find_all("div",["items"]) 17 18shop_name = soup.find("h1").text 19 20ws.title = shop_name 21 22ws.cell(row = 1, column = 1, value = "店名") 23ws.cell(row = 1, column = 2, value = "住所") 24ws.cell(row = 1, column = 3, value = "取扱商品") 25 26i = 2 27 28for elem in shops: 29 ws.cell(row = i, column = 1, value = elem.contents[0]) 30 i = i + 1 31else: 32 print('FINISH!!') 33 34for elem in adresses: 35 ws.cell(row = i, column = 2, value = elem.contents[0]) 36 i = i + 1 37else: 38 print('FINISH!!') 39 40for elem in items: 41 ws.cell(row = i, column = 3, value = elem.contents[0]) 42 i = i + 1 43else: 44 print('FINISH!!') 45 46book.save('shops_info.xlsx')

試したこと

下記プログラムのみで実行すると店名はスクレイピングできますが、これに加えて住所、取り扱い商品を加えるとスクレイピングできない。

lang

1import openpyxl as px 2import requests 3from bs4 import BeautifulSoup 4 5book = px.Workbook() 6book.save('shops_info.xlsx') 7ws = book.active 8 9# 電気街南側のアキバ系ショップ 108店舗 10load_url = "http://www.akibakei.info/plist_a.php?ar=%E9%9B%BB%E6%B0%97%E8%A1%97%E5%8D%97%E5%81%B4&pid=49" 11html = requests.get(load_url).text 12soup = BeautifulSoup(html, "html.parser") 13 14shops = soup.find_all("h3") 15 16shop_name = soup.find("h1").text 17 18ws.title = shop_name 19 20ws.cell(row = 1, column = 1, value = "店名") 21ws.cell(row = 1, column = 2, value = "住所") 22ws.cell(row = 1, column = 3, value = "取扱商品") 23 24i = 2 25 26for elem in shops: 27 ws.cell(row = i, column = 1, value = elem.contents[0]) 28 i = i + 1 29else: 30 print('FINISH!!') 31 32book.save('shops_info.xlsx')

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

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

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

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

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

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

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

guest

回答2

0

ベストアンサー

おはようございます。

先ほど問題を読ませていただきました。

自分の方でコードを確認&修正して、動作確認したものを作成しましたので、以下ご一読いただけますでしょうか?????‍♂️
電気街南側のアキバ系ショップ 108店舗をスクレイピングする

わからない部分がありましたら、気軽にご連絡ください〜

投稿2021/05/02 21:55

編集2021/05/05 00:05
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

syu_kuri_mu

2021/05/03 05:32

ありがとうございます!無事スクレイピングすることができました。 このコードを使って同サイトの別の場所も同Book内に作成できました。 ありがとうございます。
退会済みユーザー

退会済みユーザー

2021/05/03 06:10

お〜、よかったです。 今後の活躍楽しみにしてます〜!!
guest

0

ValueError: Cannot convert <i class="fa fa-folder-open"></i> to Excel
エラーでぐぐると類似質問がでてきます
https://teratail.com/questions/192240

ws.cell(row = i, column = 3, value = elem.contents[0])
でvalueに入れている値がおかしいということです

自分の環境だとエラーなしで動きましたが

投稿2021/05/02 14:59

jamjam3

総合スコア165

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

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

syu_kuri_mu

2021/05/03 05:33

ありがとうございます! しっかり読んで改良し、実行してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問