2016-05-25 1 views
0

ich habe dong ein einfaches webscraping programm, um zu lernen, wie man code und ich machte es funktioniert, aber ich wollte sehen, wie man es schneller macht. Ich wollte fragen, wie könnte ich Multithreading für dieses Programm implementieren? Alles, was das Programm macht, ist die Datei mit den Börsensymbolen zu öffnen und online nach dem Preis für diese Aktie zu suchen.Webscrape multithread python 3

Hier ist mein Code

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

Können Sie zeigen, wie stocklist.txt aussieht wie – Keatinge

+0

es ist nur ein Textdokument mit allen Namen der Aktien. etwas geht: ABY ABEO ABEOW ABIL ABMD AXAS ACIA ACTG und so weiter, sie alle haben eine ENTER nach jeder – Zepol

+0

auch mit Anfragen versuchen. Es ist besser als urllib – sayan

Antwort

0

Sie müssen asyncio verwenden. Das ist ein ziemlich nettes Paket, das Ihnen auch beim Verschrotten helfen könnte. Ich habe einen kleinen Ausschnitt davon erstellt, wie man integrate with linkedin mit asyncio erstellt, aber Sie können es ganz einfach Ihren Bedürfnissen anpassen.

Da der Standard-Executor ThreadPoolExecutor ist, wird jede Aufgabe im separaten Thread ausgeführt. Sie können ProcessPoolExecutor verwenden, wenn Sie Tasks im Prozess und nicht in Threads (GIL-bezogene Probleme) ausführen möchten.