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?'
]
これで、スクレーパーオブジェクトを使用してStackOverflowページの関連トピックを取得できます。
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_similarget_result_exactを持つGeneratedAutoScraperというクラスがあります。
get_resultメソッドを使用して両方を取得することもできます。 応用の使い方はこのGitHubのページを見てみて下さい。

AutoScraper Examples · GitHub

 

AutoScraperのパワーを実証するために
5分未満および20行より少ないのコードで任意のWebサイトからAPIを作成するためのチュートリアルを作成しました。
気になる方はこちらから読んでみてください。

AutoScraper and Flask: Create an API From Any Website in Less Than 5 Minutes | by Alireza Mika | Better Programming | Medium

 

 

ちなみに皆様に朗報です!

私今まで知らなかったんですが、CodeCampさんが無料で5回分無料レッスンを

されているらしいです、、、!

私が他のオンラインスクールで機械学習のコースを受講した際は

グループレッスンで約2倍のお値段を払ったので

完全マンツーマンでこのお値段は超良心的だなと思います。。。

 

 

 

ぜひ気になる方は無料体験もされてるみたいなので、一度WEBサイトを見てみてくださいね。

データ分析は時代が変化しても、必ず重宝される分野だと思いますし
デザイナーやWEBデベロッパー用などのコースも幅広くあるようなので
興味があるコースをチラ見してはいかがでしょうか^^

もちろん、個人で勉強する事もできますが、挫折経験のある私の個人的な経験から
プロから基礎を学ぶのは、本当に超効率的な自己投資だと思います。

 

 

最後まで読んで頂きありがとうございました^^