Webスクレイピング
ウェブスクレイピングとは、ウェブサイトから大量の情報を自動的にアクセスして抽出する技術であり、大幅な時間と労力を節約できます。この記事では、ニューヨークMTAから何百ものファイルを自動ダウンロードする方法の簡単な例を紹介します。ウェブスクレイピング初心者にとっては、ウェブスクレイピングの方法を理解するための大変良い練習です。ウェブスクレイピングは少し面倒な作業ですが、このチュートリアルではプロセスの進め方を分かりやすく解説しています。
このサイトから改札機データをダウンロードします。
http://web.mta.info/developers/turnstile.html
ターンスタイルのデータは2010年5月から現在まで毎週収集されているため、サイトには何百もの.txtファイルが存在しています。各リンクを手動で右クリックしてデスクトップに保存するのは苦痛です。
Webスクレイピングに関する重要な注意事項:
ウェブサイトの利用規約を読んで、データの合法的な利用方法を理解してください。多くのサイトでは商業目的でのデータの利用を禁止しています。ウェブサイトが壊れる可能性があるため、データをあまり速い速度でダウンロードしないようにしてください。また、サイトからブロックされる可能性もあります。
ウェブサイトの検査
まず、複数のレベルのHTMLタグ内でダウンロードしたいファイルへのリンクをどこで見つけることができるかを把握する必要があります。つまり、webサイトページにはたくさんのコードがあり、私たちはデータが含まれている関連するコードの部分を見つけたいのです。HTMLタグについて詳しく知らない場合は、W3Schoolsチュートリアルを参照してください。Webスクレイピングを成功させるには、HTMLの基礎を理解することが重要です。ウェブサイトで右クリックして、「検証」をクリックします。これにより、サイトの背後にある生のコードを見ることができます。一度「検証」をクリックすると、このコンソールが表示されます。
この矢印をクリックして、サイトの特定の領域をクリックすると、その特定のアイテムのコードがコンソールで強調表示されます。私は最初のデータファイル、2018年9月22日(土)をクリックし、コンソールがその特定のファイルへのリンクを青色で強調表示しました。
<a href=”data/nyct/turnstile/turnstile_180922.txt”>2018年9月22日土曜日</a>
すべての.txtファイルが上の行に続くタグ内にあることに注意してください。さらにWebスクレイピングを行うにつれて、がハイパーリンクに使用されることがわかるでしょう。
リンクの場所が特定されたら、コーディングを始めましょう!
Pythonコード
次のライブラリをインポートして開始します。
import requests (「import requests」)
import urllib.request → import urllib.request
import time -> import time
from bs4 import BeautifulSoup は、日本語に翻訳すると from bs4 import BeautifulSoup です。
次に、ウェブサイトのURLを設定し、要求ライブラリを使用してサイトにアクセスします。
url ='http://web.mta.info/developers/turnstile.html'の意味は何ですか?
response = requests.get(url)の翻訳は、response = requests.get(url)です。
次に、BeautifulSoupを使用してHTMLを解析し、より良い入れ子構造のBeautifulSoupデータ構造で作業できるようにします。 このライブラリについて詳しく学びたい場合は、BeatifulSoupのドキュメントを確認してください。
soup = BeautifulSoup(response.text、"html.parser")
「.findAllメソッドを使用して、すべてのタグを検索します。」
soup.findAll('a')
このコードは、<a> タグを持つすべてのコード行を取得します。私たちが興味を持っている情報は、以下に示すように38行目から始まります。つまり、最初のテキストファイルは38行目にあり、その下にある残りのテキストファイルを取得したいと思います。
one_a_tag = soup.findAll('a')[38]
このコードでは、最初のテキストファイル「data / nyct / turnstile / turnstile_180922.txt」を変数linkに保存します。実際のデータをダウンロードするための完全なURLは、「http://web.mta.info/developers/data/nyct/turnstile/turnstile_180922.txt」であり、テストとしてウェブサイトの最初のデータファイルをクリックして発見しました。urllib.requestライブラリを使用して、このファイルパスをコンピューターにダウンロードできます。 request.urlretrieveに2つのパラメータ、ファイルのURLとファイル名を提供します。私のファイルでは、「turnstile_180922.txt」、「turnstile_180901」などと名付けました。
download_url = 'http://web.mta.info/developers/'+ link download_url = 'http://web.mta.info/developers/'+ link
urllib.request.urlretrieve(download_url,'./'+link[link.find('/turnstile_')+1:])
ファイルをダウンロードする方法がわかったので、forループを使ってデータファイルの全セットをダウンロードしてみましょう。
読んでいただきありがとうございます。ウェブスクレイピングを楽しんでください!