2014-02-11 3 views
2

У меня запуталась странная ошибка. Я пытаюсь выполнить базовый синтаксический анализ. По сути, я собираю данные в формате «х» и хочу вернуть все в формате, который я могу использовать. Моя непосредственная проблема в том, что мой код возвращает странную ошибку. Я просмотрел некоторые другие сообщения/ответы здесь по той же проблеме, но из контекста ... действительно сложно определить проблему.TypeError: объект «NoneType» не может быть вызван, BeautifulSoup

data = url.text 

soup = BeautifulSoup(data, "html5lib") 

results = [] # this is what my result set will end up as 

def parseDiv(text): 
    #function takes one input parameter - a single div for which it will parse for specific items, and return it all as a dictionary 
    soup2 = BeautifulSoup(text) 
    title = soup2.find("a", "yschttl spt") 
    print title.text 
    print 

    return title.text 

for result in soup.find_all("div", "res"): 
    """ 
    This is where the data is first handled - this would return a div with links, text, etc - 
    So, I pass the blurb of text into the parseDiv() function 
    """ 
    item = parseDiv(result) 
    results.append(item) 

Очевидно в этот момент, я включил мои необходимые библиотеки ... Когда я тяну код soup2 (второй экземпляра BS4 на моих новых рекламах текста подлежащей обработке), и просто напечатать ввод моей функции, все работает.

Здесь ошибка:

Traceback (most recent call last): 
    File "testdata.py", line 29, in <module> 
    item = parseDiv(result) 
    File "testdata.py", line 17, in parseDiv 
    soup2 = BeautifulSoup(text) 
    File "C:\Python27\lib\site-packages\bs4\__i 
    markup = markup.read() 
TypeError: 'NoneType' object is not callable 
+1

Пожалуйста, разместите полную статистику стека ошибок. – thefourtheye

+1

«но из контекста ... действительно трудно определить проблему» - то же самое относится и к неполной трассировке. можете ли вы включить все линии? – mhlester

+0

редактирование, выполненное для отображения трассировки стека. – Alpinestar22

ответ

4

Вам не нужно разбирать дивы еще раз. Попробуйте следующее:

for div in soup.find_all('div', 'res'): 
    a = div.find('a', 'yschttl spt') 
    if a: 
     print a.text 
     print 
     results.append(a) 
+0

Благодаря @Jayanth, это устраняет одну проблему, но теперь я получаю ошибку атрибута: Traceback (последний последний звонок): Файл «testdata.py», строка 24, в item ['title'] = a.text AttributeError: объект 'NoneType' не имеет атрибута 'text' – Alpinestar22

+0

@ Alpinestar22 Тогда, очевидно, что-то вернуло 'None', и вы должны это проверить. – glglgl

+0

@ Alpinestar22: Это произойдет, если у одного из «div» нет «a» класса «yschttl spt». –

Смежные вопросы