改行記号を残しながら、スクレイピングしたかったんや。
以前、てっとり早いスクレイピングについて書いた記事の続き。
この記事で書くこと
- スクレイピング場面で改行記号を残さなければいけない場面の紹介
- 改行記号残しながらスクレイピングする方法
結論だけ書くと
こうする
1 2 |
dom_soup = BeautifulSoup(etree.tostring(text_dom).decode('utf-8').replace('<br/>', '\n'), "html.parser") _text = dom_soup.text |
スクレイピングで改行って残さないといけないの?
テキスト獲得後の用途に依存することが大きいですけど、でも「ある」が回答。
自然言語処理では、「段落」が大きな意味を持ってることが多いです(もちろんそうでないことある)
例えば談話解析では、段落がひとつのトピックを形成してると考えるので、段落を1単位として考えることも多いです(深層学習より前の時代はそうだった。いまは知らない)
じゃあ、HTMLで段落ってどうやって表現されるかというと、よく見るパターンは以下の3パターンかな、と。
- <div>で表現
- <p>タグで表現
- <br/>で表現
「モダンな」サイトだと<div>と<p>で「構造的に」コーディングされてることが多いですけど、古い時代のサイトは<br/>で段落を表現しちゃうこともあります。
Beautifulsoupの標準解析仕様は<br>無視
これはぼくが無知だったこと。BeautifulsoupでHTML解析すると、<br>って「削除」になってしまうんですよね。
そして、これが標準仕様。
つまり、気が付かないうちに<br>が削除されてしまう。
じゃあ、どうすればいいか?という、こうする!
1 2 |
dom_soup = BeautifulSoup(etree.tostring(text_dom).decode('utf-8').replace('<br/>', '\n'), "html.parser") _text = dom_soup.text |
Beautifulsoupに解析かける前に<br/>をすべて \n
に置換してしまう。これなら削除されることもない。
雑だけど、「てっとり早いスクレイピング」にはこれで十分。
おしまい。
ディスカッション
コメント一覧
まだ、コメントがありません