はじめに
僕は、python初心者です。
しかし、スクレイピングして、データを分析できるようになりたいです(笑)。
そこで、今回は、スクレイピングの練習をしたので、その結果を載せます。
一応、僕のようなプログラミング初心者に向けた記事です。文系学生だけど、pythonに興味を持っている人の参考になれば、と思います。
また、もしもエンジニアのかたが読まれていましたら、改善点など指摘していただけるとありがたいです。
こんな人におすすめ
- 文系学生でプログラミングに興味がある人
- Python初心者の人
- Pythonを使って英語学習をしたいと考えている人
取り組んだこと
1、webページの取得
2、プログラムによって、指定したタグから要素を抽出
3、抽出したデータを表示
使用したライブラリ
・requests
webページを取得するために使用しました。
・beautifulsoup4
取得したデータを解析、必要な要素を取り出し、データを整理しました。
最低限の知識?
webサイトを構成しているhtmlを抽出しますので、そもそもhtmlのことを最低限知っている必要があります。
例えば、chromeのディベロッパーツールを表示してみると、そのサイトのhtmlやCSSが確認できます。
上記のように文章が様々なタグによって囲まれていることが確認できると思います。
その中で、自分の欲しいデータを囲っているタグを見つけ、それだけを抽出しようというのが、僕の今回の目標です。
chromeを使用していない場合も問題ありません。
以下の方法で、htmlを取得、表示できます。
スクレイピングの練習 htmlを表示する 必要なタグを抽出する
手順としては、はじめに、https://toiguru.jp/toeic-vocabulary-list#smoothplay1から、htmlを取得しています。その時に、responseという変数に入ります。この変数名の部分は、任意で変更できます。各自わかりやすい名称にしましょう。
そして、printによって、変数を表示させます。つまり、変数というボックスの中に入っているhtmlを呼び出しています。
本題
今回、僕が行うのは、このサイトで挙げられているTOEICの頻出単語と日本語訳の抽出です。
そこで、その部分のタグを抽出したいので、該当箇所を見つけます。
すると、<tbody><tr><td>survey<br>調査</td>と囲まれています。
そこで、ざっと見た感じ、<td>は単語部分でしか使用されていないため、この部分を指定して、抽出できます。
soup=の部分は、soupという変数に、lxmlという方法を使い、それを収納しています。そして、words = soup.findAll('td')で、<td></td>の使用されている部分を抽出しています。それをfor文を使うことで、wordsという変数に入っている<td></td>すべてに同じ処理を行い、wordという変数に入れます。
word = str(words).replace('<td>', '').replace('</td>', '').replace('<br/>', ':')の部分は、不要な箇所を置き換えています。抽出したのが、<td>英語<br>日本語訳</td>という形でした。
そのため、このままでは、<td><br></td>が含まれてしまいます。したがって、replaceを使って、空白に置き換えています。また改行<br>は、「:」にしました。
そして、それらをtextファイルとして書き込み保存しています。
わーい(*´▽`*)
一応、「survey:調査」といったように単語が抽出できました。
おわりに
次は、このデータを使って、問題集を作りたいと思います。しかし、辞書型にどうやって変更させればよいのかわからないです(笑)。
それにしても、スクレイピングしたTOEICの頻出単語のサイト信頼性あるのでしょうか?テキトーにググッたらトップに出てきたので、スクレイピングの練習だから、どこでもいいやとはおもったけど……コメント欄で誤訳を指摘されていますが……
参考
以下のサイトと書籍を参考にしました。
スクレイピングについて
https://qiita.com/neet-AI/items/d434f3a96223c12fbdd3
書籍について
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング
スクレイピング・ハッキング・ラボ Pythonで自動化する未来型生活 (技術の泉シリーズ(NextPublishing))
Python2年生 スクレイピングのしくみ 体験してわかる!会話でまなべる!
TOEICの頻出単語については、以下のサイト
トイグル TOEIC頻出単語1,000語まとめ
https://toiguru.jp/toeic-vocabulary-list#smoothplay1