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

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

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

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

Python

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

Q&A

解決済

1回答

1005閲覧

書籍の通り、for in を使ってもスクレイピングできない

sophfcrb

総合スコア3

スクレイピング

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

Python

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

0グッド

0クリップ

投稿2021/07/28 14:29

「スクレイピング・ハッキング・ラボ Pythonで自動化する未来型生活 (技術の泉シリーズ(NextPublishing)) Kindle版」という書籍を見ながら、スクレイピングの練習をしています。

ここで、あるサイトをスクレイピングしようとしたところ、途中で壁に当たってしまいました。

具体的には、ある企業情報サイトから会社名を抜き出したいのですが、書籍を参考にコードを書いてもエラーになってしまいます。

書籍が練習用に使っているサイトは「はてなブックマーク」なので、自分なりに解釈してコードを作成しているのですが、うまくいきません。

もう5日もここで止まっているので、自分で解決することはあきらめました。

何が間違っているか、教えていただけないでしょうか?

以下、入力したコードです。Jupyter notebookを使用しています。

import requests

from bs4 import BeautifulSoup

url="https://www.jp.usedmachinery.bz/members/list/%E3%81%82/1"

response=requests.get(url)

soup=BeautifulSoup(response.content,"html.parser")

top_entry=soup.find("table", attrs={"class":"block-contents-a-u__list-c mod-table-a-a helper--margin-top5"})

print(top_entry)

<table class="block-contents-a-u__list-c mod-table-a-a helper--margin-top5"><tr><th class="block-contents-a-u__list-c__name mod-table-a-a__cell-head-b" scope="col"><span class="mod-text mod-text--align-center mod-text--weight-bold">会社名</span></th><th class="block-contents-a-u__list-c__stock-list mod-table-a-a__cell-head-b" scope="col"><span class="mod-text mod-text--align-center mod-text--weight-bold">在庫リスト</span></th><th class="block-contents-a-u__list-c__description mod-table-a-a__cell-head-b" scope="col"><span class="mod-text mod-text--align-center mod-text--weight-bold">会社紹介</span></th><th class="block-contents-a-u__list-c__place mod-table-a-a__cell-head-b" scope="col"><span class="mod-text mod-text--align-center mod-text--weight-bold">所在地</span></th></tr><tr><td class="block-contents-a-u__list-c__name mod-table-a-a__cell-body-b mod-table-a-a__cell-body--color-a"><p class="mod-text mod-text--size-12 mod-text--weight-bold"><a class="mod-text__link" href="/members/general_view/744">IE Development</a></p></td><td class="block-contents-a-u__list-c__stock-list mod-table-a-a__cell-body-b mod-table-a-a__cell-body--color-a"><a class="mod-btn mod-btn--theme-a-a--a" href="/members/general_list_id/744"><i class="mod-btn__icon mod-btn__icon--inline-left mod-icon mod-icon--type-a-h--a"></i><span class="mod-btn__label mod-btn__label--inline-true">リスト</span></a></td><td class="block-contents-a-u__list-c__description mod-table-a-a__cell-body-b mod-table-a-a__cell-body--color-a"><p class="mod-text mod-text--size-12">プレス機械、板金機械、工作機械等の点検、修理、販売及び買取を行っております。</p></td><td class="block-contents-a-u__list-c__place mod-table-a-a__cell-body-b mod-table-a-a__cell-body--color-a"><p class="mod-text mod-text--size-12 mod-text--align-center">栃木県</p></td></tr><tr><td class="block-contents-a-u__list-c__name mod-table-a-a__cell-body-b mod-table-a-a__cell-body--color-b"><p class="mod-text mod-text--size-12 mod-text--weight-bold"><a class="mod-text__link" href="/members/general_view/537">IMMサービス</a>...【以下省略】

entries=top_entry.find_all("a", attrs={"class":"mod-text__link"})

print(entries)

[<a class="mod-text__link" href="/members/general_view/744">IE Development</a>, <a class="mod-text__link" href="/members/general_view/537">IMMサービス</a>, <a class="mod-text__link" href="/members/general_view/130">(株)アイクス</a>, <a class="mod-text__link" href="/members/general_view/722">有限会社 鮎澤プレスサービス</a>, <a class="mod-text__link" href="/members/general_view/127">アイダエンジニアリング株式会社</a>, <a class="mod-text__link" href="/members/general_view/132">(有)アイテクノス</a>, ...【以下省略】

ここまでは抜き出しできたのですが、次にfor inで会社名を

IE Development
IMMサービス
(株)アイクス
有限会社 鮎澤プレスサービス
アイダエンジニアリング株式会社
(有)アイテクノス
...【以下省略】

と抜き出したいのですが、うまくいきません。

書籍では、

for entry in entries:
print()

を使って抜き出せるように説明されています。

for inを使う場合、どのようなコードを書けばよいでしょうか?

ご教示いただければ幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

最後に、

python

1for entry in entries: 2 print(entry.text)

で良いのではないですか。

実行結果

python

1>>> for entry in entries: 2... print(entry.text) 3... 4IE Development 5IMMサービス 6(株)アイクス 7有限会社 鮎澤プレスサービス 8アイダエンジニアリング株式会社 9(有)アイテクノス 10アイピーマシナリー 11(株)アイムSSK 12赤澤機械(株)中古部 13赤澤機械(株)東京営業所 14(株)赤澤商会 15明石マシンツール 16秋元産業株式会社 17(株)アジアマシナリー 18Asian Net 19株式会社アスカインデックス 20アツタ機工(株) 21(有)アテックス 22(有)アトム機工 23アムデックス(株) 24アリ商事 25(株)アルト 26有限会社アルファマシン 27阿波ヤンマー(株) 28(株)アンザワ 29株式会社 安藤精工 30(株)アールネット・カンパニー 31泉工業株式会社 32株式会社和泉電機製作所 33いずみマシナリー(株) 34株式会社 井谷衡機製作所 35(有)伊藤機商会 36井上機設 37伊吹産業(株) 38IL SHIN TRADING CO. 39岩間商店 ()羽田マシンセンター 40(株)インターテック 41(株)インテックス 42(株)インテックス足立支店 43(株)インテックス大阪支店 44株式会社インテックス高崎支店 45(株)インテックス名古屋支店 46ウィンテック株式会社 47(株)ヴェラッツマシン 48ウシヤマ電機株式会社 49宇田川機械工株式会社 50内山機工() 51(株)ウンノ機械 52エアビジネスセンター(株) 53(株)エイティエム

投稿2021/07/28 14:55

ppaul

総合スコア24670

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

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

sophfcrb

2021/07/28 22:51

ありがとうございます! できました! シンプルでしたね。 複雑に考えすぎていたみたいです。 助かりましたm(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問