2016-03-04 4 views
0

Я новичок в Python и пытаюсь очистить данные из Интернета (в конечном итоге), подавая небольшую базу данных.TypeError: объект «NoneType» не может быть вызван при очистке

Мой код генерирует ошибку NoneType. Не могли бы вы помочь?

import urllib2 
from bs4 import BeautifulSoup 
    #1- create files to Leagues, stock data and error 
FLeague= open("C:\Python\+exercice\SoccerLeague.txt","w") 
FData=open("C:\Python\+exercice\FootballDump.txt","w") 
ErrorFile=open("C:\Python\+exercice\ErrorFootballScrap.txt","w") 
#Open the website 
# 1- grab the data and get the error too 
soup = BeautifulSoup(urllib2.urlopen("http://www.soccerstats.com/leagues.asp").read(),"html") 
TableLeague = soup.find("table", {"class" : "trow8"}) 
print TableLeague 
#\here I just want to grab country name 
for row in TableLeague("tr")[2:]: 
     col = row.findAll("td") 
# I try to identify errors 
     try: 
      country = col[1].a.string.stip() 
      FLeague.write(country+"\n") 
     except Exception as e: 
      ErrorFile.write (country + ";" + str(e)+";"+str(col)+"\n") 
      pass 
    #close the files 
FLeague.close 
FData.close 
ErrorFile.close 
+1

Что такое 'stip()' в 'col [1] .a.string.stip()'? – vaultah

+0

@vaultah: Это, наверное, опечатка. Вероятно, он означает 'strip()'. – zondo

+0

Добро пожаловать в StackOverflow. Прочтите и следуйте инструкциям по отправке в справочной документации. [Минимальный, полный, проверяемый пример] (http://stackoverflow.com/help/mcve) применим здесь. Мы не можем эффективно помочь вам, пока вы не опубликуете свой код и не сможете точно описать проблему. Это код, который воспроизводит проблему, и полное сообщение об ошибке. – Prune

ответ

0

Первая проблема исходит от:

TableLeague("tr")[2:] 

TableLeague является None здесь, так как нет table элемента с trow8 классом. Вместо того, чтобы использовать атрибут id, чтобы найти нужный элемент таблицы:

TableLeague = soup.find("table", {"id": "btable"}) 

Кроме того, вы, вероятно, имел в виду strip() и не stip() здесь: col[1].a.string.stip().

И, чтобы закрыть файлы, вызовите метод close(). Заменить:

FLeague.close 
FData.close 
ErrorFile.close 

с:

FLeague.close() 
FData.close() 
ErrorFile.close() 

Или, еще лучше, использовать with context manager для работы с файлами - вам не нужно будет закрыть файл в явном виде.

+0

Привет, Алекс, благодарю вас за вашу подробную поддержку. Я сейчас над этим первым препятствием, и финишная линия ближе ... – lucTiber

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