2

Webサイトの最初の100ページをクロールするクローラーを作成しようとしています。

私のコードは次のようなものです:

def extractproducts(pagenumber):
    contenturl = "http://websiteurl/page/" + str(pagenumber)

    content = BeautifulSoup(urllib2.urlopen(contenturl).read())
    print pagehtml



pagenumberlist = range(1, 101)

for pagenumber in pagenumberlist:
    extractproducts(pagenumber)

この状況でスレッドモジュールを使用して、urllibが複数のスレッドを使用して一度にX個のURLをクロールするようにするにはどうすればよいですか?

/ newb out

4

1 に答える 1

0

ほとんどの場合、multiprocessingを使用する必要があります。Pool複数のことを並行して実行するために使用できる があります。

from multiprocessing import Pool

# Note: This many threads may make your system unresponsive for a while
p = Pool(100)

# First argument is the function to call,
# second argument is a list of arguments
# (the function is called on each item in the list)
p.map(extractproducts, pagenumberlist)

関数が何かを返す場合、Pool.map戻り値のリストを返します。

def f(x):
    return x + 1

results = Pool().map(f, [1, 4, 5])
print(results) # [2, 5, 6]
于 2012-06-14T16:51:58.673 に答える