Github: https://github.com/lorien/grab
つかむ
グラブとは何ですか?
グラブは、PythonのWebスクレイピングフレームワークです。 グラブは、ネットワーク要求を実行し、ウェブサイトをスクラップし、スクレイプされたコンテンツを処理するための多くの有益な方法を提供します。
- 自動クッキー(セッション)のサポート
- 承認の有無によるHTTPとSOCKSプロキシ
- キープアライブサポート
- IDNサポート
- Webフォームで作業するツール
- 簡単なマルチパートファイルのアップロード
- HTTPリクエストの柔軟なカスタマイズ
- 自動文字セット検出
- XPATHクエリを使用してHTML文書のDOMツリーからデータを抽出する強力なAPI
- 非同期APIは何千もの同時クエリを作成します。 Spiderというライブラリのこの部分。 以下のスパイダーのリストをご覧ください。
- Python 3 ready
スパイダーはウェブサイトスクレイパーを書くためのフレームワークです。 特徴:
- リクエスト/解析ロジックを別々のコードブロックで整理するためのルールと規約
- 複数の並列ネットワーク要求
- ネットワークエラーの自動処理(失敗したタスクはタスクキューに戻ります)
- Grab APIを使用してネットワーク要求を作成し、応答を解析することができます(上記参照)
- HTTPプロキシサポート
- ネットワークをキャッシュすると永続的なストレージになります
- タスクキューの異なるバックエンド(インメモリ、redis、mongodb)
- デバッグおよび統計収集ツール
グラブの例
import logging
from grab import Grab
logging.basicConfig(level=logging.DEBUG)
g = Grab()
g.go('https://github.com/login')
g.doc.set_input('login', '****')
g.doc.set_input('password', '****')
g.doc.submit()
g.doc.save('/tmp/x.html')
g.doc('//ul[@id="user-links"]//button[contains(@class, "signout")]').assert_exists()
home_url = g.doc('//a[contains(@class, "header-nav-link name")]/@href').text()
repo_url = home_url + '?tab=repositories'
g.go(repo_url)
for elem in g.doc.select('//h3[@class="repo-list-name"]/a'):
print('%s: %s' % (elem.text(),
g.make_url_absolute(elem.attr('href'))))
グラブ::スパイダーの例
import logging
from grab.spider import Spider, Task
logging.basicConfig(level=logging.DEBUG)
class ExampleSpider(Spider):
def task_generator(self):
for lang in 'python', 'ruby', 'perl':
url = 'https://www.google.com/search?q=%s' % lang
yield Task('search', url=url, lang=lang)
def task_search(self, grab, task):
print('%s: %s' % (task.lang,
grab.doc('//div[@class="s"]//cite').text()))
bot = ExampleSpider(thread_number=2)
bot.run()
インストール
$ pip install -U grab
さまざまなプラットフォームでのグラブのインストールの詳細はこちらhttp://docs.grablib.org/en/latest/usage/installation.html
ドキュメントとヘルプ
ドキュメント: http : //docs.grablib.org/ja/latest/
メーリングリスト(主にロシア語): http : //groups.google.com/group/python-grab/
貢献
バグを報告するには、GitHubの問題追跡ツールを使用してください: https : //github.com/lorien/grab/issues
グラブで新しい機能を開発したい場合は、課題トラッカーを使用して、あなたが何をしたいのかを記述してください。またはlorien@lorien.nameまでご連絡ください。