Ошибка Прекрасного Супа - PullRequest
0 голосов
/ 20 декабря 2011

Я использую красивый модуль супа, чтобы очистить заголовок списка веб-страниц, сохраненных в CSV. Сценарий работает нормально, но когда он достигает 82-го домена, он выдает следующую ошибку:

Traceback (most recent call last):
  File "soup.py", line 31, in <module>
    print soup.title.renderContents() # 'Google'
AttributeError: 'NoneType' object has no attribute 'renderContents'

Я довольно новичок в python, поэтому я не уверен, что понимаю ошибку, кто-нибудь сможет уточнить, что происходит не так?

мой код:

import csv
import socket
from urllib2 import Request, urlopen, URLError, HTTPError
from BeautifulSoup import BeautifulSoup

debuglevel = 0

timeout = 5

socket.setdefaulttimeout(timeout) 
domains = csv.reader(open('domainlist.csv'))
f = open ('souput.txt', 'w')
for row in domains:
domain = row[0]
req = Request(domain)
try:
    html = urlopen(req).read()
    print domain
except HTTPError, e:
    print 'The server couldn\'t fulfill the request.'
    print 'Error code: ', e.code
except URLError, e:
    print 'We failed to reach a server.'
    print 'Reason: ', e.reason
else:
    # everything is fine
    soup = BeautifulSoup(html)

    print soup.title # '<title>Google</title>'
    print soup.title.renderContents() # 'Google'
    f.writelines(domain)
    f.writelines("  ")
    f.writelines(soup.title.renderContents())
    f.writelines("\n")

Ответы [ 3 ]

1 голос
/ 20 декабря 2011

Как сказал maozet, ваша проблема в том, что title - None, вы можете проверить это значение, чтобы избежать этой проблемы:

soup = BeautifulSoup(html)

if soup.title != None:
    print soup.title # '<title>Google</title>'
    print soup.title.renderContents() # 'Google'
    f.writelines(domain)
    f.writelines("  ")
    f.writelines(soup.title.renderContents())
    f.writelines("\n")
1 голос
/ 20 декабря 2011

Что делать, если у страницы нет заголовка ???
Однажды у меня возникла эта проблема ... просто вставьте код в код "исключить" или проверьте заголовок.

0 голосов
/ 25 августа 2012

Я столкнулся с той же проблемой, но чтение пары вопросов и поиск в Google помогли мне.Вот что я бы предложил для обработки определенных ошибок, таких как NoneType:

soup = BeautifulSoup(urllib2.urlopen('http://webpage.com').read())
scrapped = soup.find(id='whatweseekfor')

if scrapped == None:
    # command when encountering an error eg: print none

elif scrapped != None:
    # command when there is no None type error eg: print scrapped.get_text()

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...