重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

表題の件、教えてください。
ウェブスクレイピングするサイトのHTMLが添付の写真の場合、駐車台数の「4台」のみを取り出すことは可能なのでしょうか。他の項目で<td>ダグがたくさんあるので、駐車台数に絞って情報をスクレイピングすることは難しいでしょうか?

ーーーーーーーーーーーーーーーー
page_url = "https://petlife.asia/hospital/12888/"
r = requests.get(page_url)
soup = BeautifulSoup(r.text, features="html.parser")
td_tags = soup.find_all("td", class_="parking")
ではもちろんダメでした。

よろしくお願いします。

「ウェブスクレイピング Python Be」の質問画像

A 回答 (2件)

> Htmlに問題ありなんですね。


> このまま試行錯誤を続けてもできないものはできないのでしょうか、、

いや、やろうと思えば出来ますよ。「この一件に関して言えば」です。
ただ、何故プログラムを書くのか。自動化が目的ですよね。
言い換えると、「ルールに則って書かれてるから」解析が可能なんだけど、「ルールに則って書かれてないモノ」にアドホックに対応したとして、じゃあ、その書いたプログラムは普遍性があるのか、ってぇと違うわけでしょう。
Webページにまたもやデータが追加されるかもしれない。そうなったら今「アドホックに対応して書いたプログラム」は将来的に破綻します。それは貴方にとって嬉しい事なのか。多分違うんですよね。

んで、ぶっちゃけ、何故に皆やりたがる割には最終的にWebスクレイピングが人気が無いのか、ってぇとこれが理由なんですよ(笑)。HTMLって人がビルダとかCSS使ってるにせよ「ブラウザに表示できりゃエエや」ってテキトーに書いてるケースがあるんで、「ルール違反」があって、ルール違反がある以上、「理屈通りに解析出来ない」ケースが出てくる。他人が作ったモノ(HTML)には信用がおけない。これに尽きるんです。

余談: yak shaving で人生の問題の80%が説明できる問題
http://0xcc.net/blog/archives/000196.html

仮にこのページがキチンとHTMLで書かれてたとしたら、方策としては<table class="b-info">を取り出して、その中身の<th>タグをキー、<td>タグを値とした辞書(dictionary)データを作ります。そうすれば理論的には"駐車場台数"をキーとしたら"4台"が取り出される筈なんですけどねぇ。直近のタグを使ってデータを取り出そうと何個か試験してみたんですが、全部「余計なtd」のせいで、その後ろのデータを食えないんですよねぇ。
「ウェブスクレイピング Python Be」の回答画像2
    • good
    • 0
この回答へのお礼

ご丁寧に回答いただきありがとうございました。非常に参考になりました!!

お礼日時:2020/08/25 12:09

> td_tags = soup.find_all("td", class_="parking")



駐車場の台数を調べたい、っつってもtdタグにparkingってのは存在しないんじゃないですか?
存在しないものを指定してもしょーがない。

それ以前に、このWebページ、Html記述が「間違ってる」気がします。
そのためにページのパーズが上手く行ってないんじゃないか・・・。
</div>が一つ多い為に、それ以降の「施設情報」が上手く読み取れないんだよなぁ・・・・。
このページの作成元に連絡入れた方が良いかも(笑)。ブラウザが「緩く」判断してくれるお陰で正常に表示はされていますが・・・・・・。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
ご指摘の通り、ないものを指定してしまっていました。

Htmlに問題ありなんですね。
このまま試行錯誤を続けてもできないものはできないのでしょうか、、

お礼日時:2020/08/22 11:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!