2016-05-28 13 views
0

私はコードをsimillarしなければなりません。一つはマルチスレッドで、もう一つはdoesntです。マルチスレッドを持っている一つは、このエラーはAttributeErrorを取得している:他のありえないが、ここに私のコードである一方、「NoneType」オブジェクトには、属性「テキスト」を持っていない:Error:AttributeError: 'NoneType'オブジェクトに属性 'text'がありません

マルチスレッド:

import threading 
import requests 
from bs4 import BeautifulSoup 

symbolsfile = open("Stocklist.txt") 

symbolslist = symbolsfile.read() 

thesymbolslist = symbolslist.split("\n") 

print (thesymbolslist) 


print_lock = threading.Lock() 

def th(ur): 
    theurl = "http://money.cnn.com/quote/quote.html?symb=" + ur 
    thepage = requests.get(theurl) 
    soup = BeautifulSoup(thepage.content,"html.parser") 
    textfind = soup.find('span',{"stream":"last_36276"}) 
    texttext = textfind.text 
    with print_lock: 
     print(textfind) 

threadlist = [] 

for u in thesymbolslist: 
    t = threading.Thread(target = th, args=(u,)) 
    t.start() 

    threadlist.append(t) 

for b in threadlist: 
    b.join() 

と1なしマルチスレッド:

import requests 
from bs4 import BeautifulSoup 


theurl = "http://money.cnn.com/quote/quote.html?symb=" + "AAPL" 
thepage = requests.get(theurl) 
soup = BeautifulSoup(thepage.content,"html.parser") 
textfind = soup.find('span',{"stream":"last_36276"}) 
texttext = textfind.text 
print(texttext) 
+0

スレッドが必要ですか?最初に作業コードに、他のコードのようなメソッドを使用するようにしてください。 –

+0

私が望んでいるのは、作業コードを他のリンクと一緒に処理することです。マルチスレッドを使用するとプロセスがスピードアップします。私が理解していないのは、マルチスレッドのエラーが発生している理由です。 – Zepol

+0

ええ、 'soup.find'は何かを返すべきです(私が見ている唯一の' text'属性です) –

答えて

0

symbolslist['AAPL']に設定されている場合multihreadingコードは、私のシステム(Win10、Pythonの3.4-64bit)に完全に正常に動作します。しかし、symbolslist['AAPL', 'IBM']に設定されていると、エラーが報告されてスクリプトがクラッシュします。

返されたHTMLコードを調べると、一度stream="last_151846"と一度stream="last_36276"が使用されていることがわかります。あなたは

textfind = soup.find('span',{"streamformat":"ToHundredth"}) 

または

textfind = soup.find('span',{"streamfeed":"SunGard"}) 

textfindラインを変更すると、コードはこれらの例のために、そして、できればStocklist.txtで提供するもののために動作します。

関連する問題