2016-05-25 17 views
0

私はコードを書く方法を学ぶためのシンプルなwebscrapingプログラムを行っていましたが、それを動作させましたが、もっと速くする方法を見たいと思っていました。私はこのプログラムにマルチスレッドを実装する方法を尋ねたがっていますか?プログラムが行うことは、株価ファイルを開き、その株価をオンラインで検索することです。Webscrape multithread python 3

は、ここであなただけのリストの機能を反復した場合、私はあなたにmultiprocessing.Pool.map(function, list)をお勧めします私のコード

import urllib.request 
import urllib 
from threading import Thread 

symbolsfile = open("Stocklist.txt") 

symbolslist = symbolsfile.read() 

thesymbolslist = symbolslist.split("\n") 

i=0 


while i<len (thesymbolslist): 
    theurl = "http://www.google.com/finance/getprices?q=" + thesymbolslist[i] + "&i=10&p=25m&f=c" 
    thepage = urllib.request.urlopen(theurl) 
    # read the correct character encoding from `Content-Type` request header 
    charset_encoding = thepage.info().get_content_charset() 
    # apply encoding 
    thepage = thepage.read().decode(charset_encoding) 
    print(thesymbolslist[i] + " price is " + thepage.split()[len(thepage.split())-1]) 
    i= i+1 
+0

株価リスト – Keatinge

+0

のような株価リストを表示できますか?それは単なる株価のテキスト文書です。また、リクエストを使用してみてください ABY ABEO ABEOW ABIL ABMD AXAS ACIA ACTG というように、それらはすべて、それぞれ1 – Zepol

+0

後にEnterていますこのような何かを行きます。それはurllibより良いです – sayan

答えて

0

あなたがasyncioを使用する必要があります。それは廃棄にも役立つ、きちんとしたパッケージです。私はasyncioとintegrate with linkedinする方法の小さなスニペットを作成しましたが、あなたは非常に簡単にそれを採用することができます。

import asyncio 
import requests 

def scrape_first_site(): 
    url = 'http://example.com/' 
    response = requests.get(url) 


def scrape_another_site(): 
    url = 'http://example.com/other/' 
    response = requests.get(url) 

loop = asyncio.get_event_loop() 

tasks = [ 
    loop.run_in_executor(None, scrape_first_site), 
    loop.run_in_executor(None, scrape_another_site) 
] 

loop.run_until_complete(asyncio.wait(tasks)) 
loop.close() 

デフォルトのexecutorはThreadPoolExecutorなので、別のスレッドで各タスクを実行します。スレッドではなく処理中のタスクを実行する場合は、ProcessPoolExecutorを使用できます(GIL関連の問題かもしれません)。