3

私のプロジェクトでは、API を持たないサイトから大量のデータをスクレイピングしたり、API があればそれを呼び出したりします。複数のスレッドを使用して速度を向上させ、リアルタイムで作業します。これに適したプログラミング言語はどれですか? 私はPythonに慣れています。しかし、スレッド化が問題です。そこで、node.js で JS を使おうと考えています。では、どちらを選べばよいのでしょうか。

4

3 に答える 3

3

Python では、スクレーパーをマルチスレッド化できます。私は過去に美しいスープを使用しましたが、代替品があります.

Beautiful Soup を使用した経験があるので、それを使用してスクレーパーをマルチプロセスする非常に簡単な例を以下に示します。

from BeautifulSoup import BeautifulSoup
from multiprocessing import Process, JoinableQueue, cpu_count

jobs = []
queue = JoinableQueue()


class scraperClass(Process):
    def __init__(self,queue):
        Process.__init__(self)
        # Other init things
        
    def run(self):
        # your scraping code here
        # Perhaps save stuff to a DB?

            page = urllib2.urlopen(fullUrl)      # fullUrl can be passed in via the queue, or other possible methods
            soup = BeautifulSoup(page)
            # Read Beautiful Soup docs for how to parse further


def main():
    numProcesses = 2
    for i in xrange(numProcesses):
        p = scraperClass(queue)
        jobs.append(p)
        p.start()           # This will call the scapperClass.run() method

if __name__ == "__main__":
    main()
于 2012-05-31T13:50:00.653 に答える
3

スレッド化は、複数の処理を並行して計算する場合にのみ Python で問題になります。大量のリクエストを処理したいだけなら、インタープリターの制限 (ある時点で Python を解釈するスレッドは 1 つだけ) は問題になりません。

実際、同時に多くのリクエストを行うために、多くのスレッドを使用する必要さえありません。requests.asyncなどの非同期リクエスト ライブラリを使用できます。

リクエストの結果を処理するために大量の計算が必要な場合は、multiprocessingを使用して python でいつでも並列化できます。これにより、先ほど説明したスレッドの制限を回避できます。

于 2012-05-31T13:41:49.150 に答える
0

簡単な検索を行ったところ、Scrapy と呼ばれる pytohon のスクレイピング フレームワークが見つかりました。クールに見えますが、試したことはありません: http://scrapy.org/

チュートリアルからの引用は次のとおりです。

「そのため、Web サイトから何らかの情報を抽出する必要がありますが、その Web サイトには、その情報にプログラムでアクセスするための API やメカニズムがありません。Scrapy は、その情報を抽出するのに役立ちます。」

API呼び出しも処理できると言っています

于 2012-05-31T13:38:11.003 に答える