Ошибка: AttributeError: объект’ NoneType ‘не имеет атрибута ‘text’

я должен simillar коды, один имеет многопоточность, а другой нет. тот, который имеет многопоточность получает эту ошибку 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()

и один без многопоточности:

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)

1 ответ

  1. Многопоточный код прекрасно работает в моей системе (Win10, Python 3.4-64bit), когда symbolslistустановлен ['AAPL']в. Но сценарий аварийно завершает работу с сообщенной ошибкой, когда symbolslistустановлено значение ['AAPL', 'IBM'].

    При проверке возвращенного HTML-кода, Вы можете увидеть, что один раз stream="last_151846"и один раз stream="last_36276"используется. При изменении textfindстроки на

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

    или

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

    код будет работать для этих примеров, и, надеюсь, для тех, которые приведены в Stocklist.txt.