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

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

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

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

Python

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

HTML

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

Q&A

解決済

1回答

537閲覧

スクレイピング時のデータの加工

fallout_boy

総合スコア8

スクレイピング

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

Python

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

HTML

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

1グッド

0クリップ

投稿2020/03/13 23:33

スクレイピングを行なっております。以下のようにbeautifulsoup4によってタグから情報を一括で所得した時に〇〇線/〇〇駅 歩〇分という情報のみに加工したいのですが何か良い方法はありますでしょうか?

python

1station = soup.find_all("div",{'class':'detailnote-box'}) 2station

→出力
[<div class="detailnote-box">

<div>都営浅草線/高輪台駅 歩8分</div> <div>JR山手線/五反田駅 歩12分</div> <div>JR山手線/品川駅 歩10分</div> </div>, <div class="detailnote-box"> <div class="detailnote-box-item"> <!-- 取り扱い店舗 --> <input id="clipkey" type="hidden" value="100189944780"> <div><a class="js-noCassetteLink" href="/chintai/kaisha/kc_030_158045001/" title="MINATO STYLE (株)3B ARROWS">MINATO STYLE (株)3B ARROWS</a></div> <!-- 取り扱い店舗の電話番号 --> <div class="ui-text--bold"> 0037-625-05623</div> </input></div> </div>, <div class="detailnote-box"> <div>都営浅草線/高輪台駅 歩8分</div> <div>JR山手線/品川駅 歩10分</div> <div>JR山手線/五反田駅 歩13分</div> </div>, <div class="detailnote-box"> <div class="detailnote-box-pct"><span class="ellipse_pct">見学予約可</span></div> <div class="detailnote-box-item"> <!-- 取り扱い店舗 --> <input id="clipkey" type="hidden" value="100189886085"/> <div><a class="js-noCassetteLink" href="/chintai/kaisha/kc_030_144978001/" title="(株)東京アーバンディライト">(株)東京アーバンディライト</a></div> <!-- 取り扱い店舗の電話番号 --> <div class="ui-text--bold">
s.k👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下でどうでしょう?

python3

1stations = [div.text for div in soup.select('.detailnote-box > div') if re.match(r'.+線/.+駅\s+歩\d+分', div.text)]

本題とは関係のない余談ですが、高輪台、五反田、品川の中間あたりというと、(今でもこう呼ばれているかは知りませんが、)3Sと呼ばれるお嬢さま女子大のひとつがある辺りですかね。お家賃、それなりにいいお値段しそうですね。

投稿2020/03/14 00:26

jun68ykt

総合スコア9058

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

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

fallout_boy

2020/03/15 13:37

ありがとうございました。回答を参考に各物件の最短(一番上)の時間のみをとってくるようにsplitなどを使って試行錯誤していますが、できません。教えていただけますでしょうか。
jun68ykt

2020/03/15 17:18

どういたしまして。 > 各物件の最短(一番上)の時間のみをとってくる ということだと、以下でいけるかと思います。 minutes = [re.search('歩(\d+)分', div.text).group(1) for div in soup.select('.detailnote-box > div:first-child') if re.match(r'.+線/.+駅\s+歩\d+分', div.text) ] 要素のセレクターに、 :first-child を追加することで、.detailnote-box 直下 のdiv のうち、最初のものだけを取得し、そのテキストが、'.+線/.+駅\s+歩\d+分' に一致するのものについて、歩と分の間に挟まれた数字を取得します。 動作確認用Repl.ithttps://repl.it/@jun68ykt/Q246983-2
fallout_boy

2020/03/17 00:57

何度も何度もすいません。抽出したいデータの中に~~線に該当しないゆりかもめがありました。これがすり抜けていました。以下のようなテキストも含まれていた場合、どのようにすれば良いでしょうか。 </div>, <div class="detailnote-box"> <div>新交通ゆりかもめ/高輪台駅 歩8分</div> <div>JR山手線/品川駅 歩10分</div> <div>JR山手線/五反田駅 歩13分</div> </div>, <div class="detailnote-box"> 回答者様のコードからこのようにifを並列させてみましたがうまくいきません minutes = [re.search('歩(\d+)分', div.text).group(1) for div in soup.select('.detailnote-box > div:first-child') if re.match(r'.+線/.+駅\s+歩\d+分', div.text) if re.match(r'新交通ゆりかもめ/.+駅\s+歩\d+分', div.text)] どのようにすれば良いでしょうか...
fallout_boy

2020/03/17 08:19

解決しました、度々ご迷惑をおかけしてすいません。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問