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

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

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

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

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

Q&A

解決済

3回答

6888閲覧

BeautifulSoupでスクレイピングした結果から改行、スペースを消したい

sugaga

総合スコア5

スクレイピング

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

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

0グッド

0クリップ

投稿2020/01/11 13:31

編集2020/01/12 13:11

前提・実現したいこと

Yahoo道路交通情報からBeautifulSoupでスクレイピングした結果から改行、スペースを消したい

該当のソースコード

Python3

1import urllib.request as req 2from bs4 import BeautifulSoup as bs 3 4def roadscrape(): 5 url = "https://roadway.yahoo.co.jp/list" 6 html = req.urlopen(url) 7 soup = bs(html, "lxml") 8 for table in soup.select('#adt_lst'): 9 for tr in table.find_all("tr"): 10 r_road = [td.get_text(strip=True) for td in tr.find_all("td")] 11 if r_road: 12 yield r_road 13 14def main(): 15 for i, r_road in enumerate(roadscrape()): 16 print(",".join(r_road)) 17 18main() 19

###実行結果(該当のソースコード)

イメージ説明

試したこと

get_textに(strip=True)を追加した
しかし出力すると改行やスペースが含まれている

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

Pythonのバージョンは[3.6.9]です。

###参考
PythonによるスクレイピングでLifehack 運行情報を取得して通知する
こちらのページのコメント部分にあるコードを利用しました。

###別のアプローチ
「上り」が表示されていた場合に下りが表示されていないことや、
「事故等 他の規制」の間に改行があって下にずれている場合がある部分を整備したもの

Python3

1import pandas as pd 2import sys 3df = pd.read_html("https://roadway.yahoo.co.jp/list", index_col=0)[0] 4df.to_csv(sys.stdout, header=False)

イメージ説明

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

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

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

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

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

guest

回答3

0

すべての空白を除去するわけじゃないです。
リファレンスには、

各文字列パーツの最初と最後の空白を除去することもできます。:

と書いてあります。

replaceで削除しましょう。

投稿2020/01/11 14:13

編集2020/01/11 14:15
otn

総合スコア84505

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

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

sugaga

2020/01/12 03:28

BeautifulSoupのリファレンスを見てなかったので勉強になりました、ありがとうございます!
otn

2020/01/12 10:49

使う前に必ずリファレンスを見ましょうとは言いませんが、動作が期待通りでないときに、まず見るのがリファレンスです。
sugaga

2020/01/12 13:00

Qiitaや参考書などで済ませようとしていたので教訓になりました。 今後気をつけます、ご忠告ありがとうございます!
guest

0

ちょっと気になったので表示結果が
下りに「道路名」なくて左にずれてるいるのと
事故等 他の規制の間に改行があって下にずれているのですが大丈夫なのでしょうか?

参考までに
Pandasでtableを取得すると道路名等の結合部分が補完されますのできれいに取得できます

python

1import pandas as pd 2import sys 3df = pd.read_html("https://roadway.yahoo.co.jp/list", index_col=0)[0] 4df.to_csv(sys.stdout, header=False)

東名高速,上り,事故等 他の規制
東名高速,下り,事故等 他の規制
中央道,上り,他の規制
中央道,下り,他の規制
2号目黒線,下り,他の規制
3号渋谷線,上り,他の規制
4号新宿線,上り,他の規制
5号池袋線,上り,他の規制
7号小松川線,下り,他の規制
9号深川線,下り,他の規制
中央環状線,内回,事故等 他の規制
中央環状線,外回,事故等 他の規制
湾岸線,東行,他の規制
湾岸線,西行,他の規制

投稿2020/01/12 12:43

barobaro

総合スコア1286

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

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

sugaga

2020/01/12 13:12

解決済みのものにわざわざありがとうございます! 下りに道路名がないものは上りの下に出てるからいいか、と半ば妥協していましたがおかげで見やすくなりました。 「事故等 他の規制」のところも同様にしょうがないと思っていたので綺麗になって助かりました。 ほんとうにありがとうございます!
guest

0

ベストアンサー

Python

1def main(): 2 for i, r_road in enumerate(roadscrape()): 3 4 r_str = ",".join(r_road) 5 r_str_new = r_str.replace(' ','') 6 string_new = r_str_new.replace('\n','') 7 print(r_str_new)

[]参照

投稿2020/01/11 15:07

Reach

総合スコア733

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

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

sugaga

2020/01/12 03:30

コードを載せいていただきありがとうございます。 考えていた表示ができて助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問