私のプロジェクトでは、API を持たないサイトから大量のデータをスクレイピングしたり、API があればそれを呼び出したりします。複数のスレッドを使用して速度を向上させ、リアルタイムで作業します。これに適したプログラミング言語はどれですか? 私はPythonに慣れています。しかし、スレッド化が問題です。そこで、node.js で JS を使おうと考えています。では、どちらを選べばよいのでしょうか。
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()
スレッド化は、複数の処理を並行して計算する場合にのみ Python で問題になります。大量のリクエストを処理したいだけなら、インタープリターの制限 (ある時点で Python を解釈するスレッドは 1 つだけ) は問題になりません。
実際、同時に多くのリクエストを行うために、多くのスレッドを使用する必要さえありません。requests.asyncなどの非同期リクエスト ライブラリを使用できます。
リクエストの結果を処理するために大量の計算が必要な場合は、multiprocessingを使用して python でいつでも並列化できます。これにより、先ほど説明したスレッドの制限を回避できます。
簡単な検索を行ったところ、Scrapy と呼ばれる pytohon のスクレイピング フレームワークが見つかりました。クールに見えますが、試したことはありません: http://scrapy.org/
チュートリアルからの引用は次のとおりです。
「そのため、Web サイトから何らかの情報を抽出する必要がありますが、その Web サイトには、その情報にプログラムでアクセスするための API やメカニズムがありません。Scrapy は、その情報を抽出するのに役立ちます。」
API呼び出しも処理できると言っています