2011-01-03 26 views
3

提供しているコンテンツと非常に似ている約100のウェブサイトを削り取る必要があります。PHPやPythonを使ったWebスクレイピング技術

私の最初の疑問。 100のウェブサイトすべてを掻き取るための一般的なスクリプトを書くことができなければならないか、または掻き取り技術では特定のウェブサイトのスクリプトを書くことしかできません。 (ダムの質問。)私はどのような可能性があるのか​​を尋ねるべきだと思う。ウェブサイトごとに100種類のスクリプトを書くのは難しいです。

2番目の質問です。私の主な言語はPHPですが、ここでStackoverflowを検索したところ、最も高度なスクレイパーの1つはPythonの「美しいスープ」です。 Pythonで "Beautiful Soup"をPHPで呼び出すことは可能でしょうか?または、Pythonですべてのスクリプトを実行する方がよいでしょうか?

私はどうすればいいのかを手がかりにしてください。

私の弱い英語のために申し訳ありません。

よろしくお願いします。

+0

PythonはPhytonではありません – Unode

+0

Pythonはあなたのツールベルトに素敵なものになり、PHPの書き方を改善することさえできます。スクリプトがcrontabから実行される場合、Pythonが良い選択です - データベースアクセスのためのSqlSoupも見てください。 –

+1

あなたのポストで "BeautifulSoup"を参照している、私は疑いがある、 "美しい石鹸" –

答えて

2

1.)100箇所のスクレーパーは1つですか?それはあなたの要求に依存します。特定の情報だけが必要な場合は、100種類のウェブサイトとそのレイアウトを検討する必要があります。しかし、いくつかの一般的な機能を共有することができます。

2.)BeautifulSoupは、HTML/XMLパーサーであり、スクリーンスクレーパーそのものではありません。スクレーパーがPythonで書かれているのであれば、これはタスクにとって最善の選択です。 PHPからpythonを呼び出すことはできますが、確かに単一言語ソリューションほどきれいではありません。だから私はプロトタイプのためにPythonとBeautifulSoupを調べることをお勧めします。

追記:http://scrapy.org/は、特にウェブサイトをクロールし、そのページから構造化データを抽出するために

を設計し、別のPythonライブラリです。

2

私はPythonではなくPHPを好むので、私はかつてphpQueryを使ってウェブサイトからデータをスクレイプしました。それはかなりうまくいく、と私はかなり素早く、要素を選択し、それの->text()を得るためにCSSセレクタ(SelectorGadgetの助けを借りて)を使用してscaperを思い付いた。

しかし私はそれが少し遅かった(私は数千ページを擦っていたので)ので、最終的に正規表現を使ってデータを掻き集めるように変更しました。 D:

0

これはいくつかの方法で行いました。

1:grep、sed、およびawkを使用。これは2:正規表現とほぼ同じです。これらのメソッドは非常に直接的ですが、サイトのHTML構造が変更されるたびに失敗します。

3:PHPのXML/HTMLパーサDomDocument。これは正規表現よりはるかに信頼性が高いですが、私はPHPの配列とオブジェクトの混在が嫌いです。 PHPを使用したい場合は、タイ語のように、PHPQueryはおそらく良い解決策です。

4:PythonとBeautifulSoup。私はBeautifulSoupについて十分なことを言うことができず、これが私が推奨する方法です。私は自分のコードがPythonできれいだと感じていて、BeautifulSoupはとても簡単で効率的でした。良いドキュメントもあります。

サイトごとにスクリプトを特殊化する必要があります。どのような情報を抽出するかによって異なります。body titleのような何かの標準であれば、何も変更する必要はありませんが、もっと具体的な情報が必要でしょうか?

0

Pythonを使用したRSSフィードでは、このようなことをしています - 通常、RSSは整形式であることが保証されているため、ElementTreeを使用しています。おそらくBeautiful SoupがHTMLの解析に適しています。

100種類のサイトを扱うのであれば、それらのほとんどで動作する抽象化を作成して、ページを共通のデータ構造に変換することができます。その後、抽象の一部をオーバーライドして、ノルムとは異なる個々のサイトを処理します。

通常、スクレイパーはI/Oバインドされています.I/Oの並列処理を利用してプロセス全体を高速化するために、eventletやgeventなどのコルーチンライブラリを調べます。

関連する問題