Пока этот код работает довольно быстро:

for olay in soup("li", {"class":"textb"}):
    tanim = olay("strong")
    try:
        print tanim[0]
    except IndexError:
        pass

Получение строкового свойства делает этот код значительно медленнее:

for olay in soup("li", {"class":"textb"}):
    tanim = olay("strong")
    try:
        print tanim[0].string
    except IndexError:
        pass

Мой вопрос в том, делаю ли я что-то, чего не должен получать строковое свойство? Должен ли я использовать что-то еще, чтобы получить текстовую версию объекта?

Обновление: это также работает довольно быстро, так что медлительность уникальна для строкового свойства, я думаю?

for olay in soup("li", {"class":"textb"}):
    tanim = olay("strong")
    try:
        print tanim[0].text
    except IndexError:
        pass
1
yasar 17 Дек 2011 в 14:49
Я не могу воспроизвести это. Для меня .text самый медленный, а два других примерно одинаковы. Хотя в целом разница не большая. Итак, вопрос: что вы тестируете и как?
 – 
ekhumoro
18 Дек 2011 в 00:10

1 ответ

Если вы просто хотите напечатать строковое представление tanim[0]. Вы должны просто сделать: print str(tanim[0]). Кроме того, выполните dir(tanim[0]), чтобы увидеть, есть ли у него свойство с именем string вообще.

for olay in soup("li", {"class":"textb"}):
    tanim = olay("strong")
    try:
        print str(tanim[0])
    except IndexError:
        pass

Чтобы каждый мог дать лучший ответ, вы также можете опубликовать целевой HTML или URI и указать, какой бит вы пытаетесь извлечь из него.

0
gsbabil 17 Дек 2011 в 15:09