AutoScraperとは?~Python用のスマートで高速かつ軽量のWebスクレイパー~
ウェブスクレイピングを頻繁にこなす方は多いのではないでしょうか?
このプロジェクトは、スクレイピングを簡単にするため
自動Webスクレイピング用に作成されています。
WebページのURLまたはHTMLコンテンツと、そのページから取得するサンプルデータのリストを取得します。
このデータは、テキスト、URL、またはそのページの任意の
HTMLタグ値にすることができます。
スクレイピングのルールを学習し、同様の要素を返します。
次に、この学習したオブジェクトを新しいURLで使用して
それらの新しいページの類似したコンテンツまたは
まったく同じ要素を取得できます。
インストール
Python3を使用してきます。pipを使用してgitリポジトリから最新バージョンをインストールします。
$ pip install git+https://github.com/alirezamika/autoscraper.git
使い方
似ている結果をゲットする
StackOverflowページで関連するすべての投稿タイトルを取得するとします。
from autoscraper import AutoScraper |
url = 'https://stackoverflow.com/questions/2081586/web-scraping-with-python' |
# We can add one or multiple candidates here. |
# You can also put urls here to retrieve urls. |
wanted_list = ["How to call an external command?"] |
scraper = AutoScraper() |
result = scraper.build(url, wanted_list) |
print(result) |
出力はこちらです。
[ |
'How do I merge two dictionaries in a single expression in Python (taking union of dictionaries)?', |
'How to call an external command?', |
'What are metaclasses in Python?' |
'Does Python have a ternary conditional operator?', |
'How do you remove duplicates from a list whilst preserving order?', |
'Convert bytes to a string', |
'How to get line count of a large file cheaply in Python?', |
"Does Python have a string 'contains' substring method?", |
'Why is "1000000000000000 in range(1000000000000001)" so fast in Python 3?' |
] |
scraper.get_result_similar('https://stackoverflow.com/questions/606191/convert-bytes-to-a-string')
正確な結果をゲットする
YahooFinanceからライブの株価を取得したいとします。
from autoscraper import AutoScraperurl = 'https://finance.yahoo.com/quote/AAPL/'wanted_list = ["124.81"]scraper = AutoScraper()# Here we can also pass html content via the html parameter instead of the url (html=html_content)
result = scraper.build(url, wanted_list)
print(result)
カスタムrequests
モジュールのパラメータを渡すことできます。 たとえば、プロキシ(Webブラウザの身代わり、代理)
またはカスタムヘッダーを使用したいとします。
proxies = {
"http": 'http://127.0.0.1:8001',
"https": 'https://127.0.0.1:8001',
}result = scraper.build(url, wanted_list, request_args=dict(proxies=proxies))
これで、シンボルの価格を取得する事ができます。
scraper.get_result_exact('https://finance.yahoo.com/quote/MSFT/')
他の情報もゲットしてみましょう。
たとえば、時価総額も取得したい場合、それをリストに追加するだけです。
get_result_exact
メソッドを使用すると、必要なリストの同じような正確な順番でデータが取得されます。
別の例も見ていきましょう。
リポジトリページのリクエストを引っ張ってくる為
テキスト、星の数、リンクをスクレイプしたいとします。
url = 'https://github.com/alirezamika/autoscraper'wanted_list = ['A Smart, Automatic, Fast and Lightweight Web Scraper for Python', '662', 'https://github.com/alirezamika/autoscraper/issues']scraper.build(url, wanted_list)
意外とシンプルです。
モデルを保存する
後ほどまた使用するために、一度保存しましょう。
# Give it a file path
scraper.save('yahoo-finance')
ロードします。
scraper.load('yahoo-finance')
スクレイパーのpythonコードを書く
単体のコードをつくって、出来上がったスクレイパーをどこでも使用する事ができます。
code = scraper.generate_python_code()
print(code)
つくったコードを出力します。
使用できるメソッド
get_result_similar
とget_result_exact
を持つGeneratedAutoScraper
というクラスがあります。get_result
メソッドを使用して両方を取得することもできます。
応用の使い方はこのGitHubのページを見てみて下さい。
AutoScraperのパワーを実証するために
5分未満および20行より少ないのコードで任意のWebサイトからAPIを作成するためのチュートリアルを作成しました。
気になる方はこちらから読んでみてください。
ちなみに皆様に朗報です!
私今まで知らなかったんですが、CodeCampさんが無料で5回分無料レッスンを
されているらしいです、、、!
私が他のオンラインスクールで機械学習のコースを受講した際は
グループレッスンで約2倍のお値段を払ったので
完全マンツーマンでこのお値段は超良心的だなと思います。。。
ぜひ気になる方は無料体験もされてるみたいなので、一度WEBサイトを見てみてくださいね。
データ分析は時代が変化しても、必ず重宝される分野だと思いますし
デザイナーやWEBデベロッパー用などのコースも幅広くあるようなので
興味があるコースをチラ見してはいかがでしょうか^^
もちろん、個人で勉強する事もできますが、挫折経験のある私の個人的な経験から
プロから基礎を学ぶのは、本当に超効率的な自己投資だと思います。
最後まで読んで頂きありがとうございました^^