Сеть Python, очищающая связавший HTML-тэги с атрибутами

Бросок из деструктора может привести к катастрофическому отказу, потому что этот деструктор можно было бы назвать как часть "Раскручивания стека". Раскручивание стека является процедурой, которая происходит, когда исключение выдается. В этой процедуре были брошены все объекты, которые были продвинуты в стек начиная с "попытки" и до исключения, будет завершен->, их деструкторы назовут. И во время этой процедуры, не позволяется другой бросок исключения, потому что не возможно обработать два исключения за один раз, таким образом, это побудит вызов прерываться (), программа откажет, и управление возвратится к ОС.

7
задан GobiasKoffi 8 September 2009 в 03:25
поделиться

3 ответа

Из вашего вопроса мне непонятно, почему вам нужно беспокоиться о тегах div - как насчет того, чтобы делать просто:

soup = BeautifulSoup(html)
thetd = soup.find('td', attrs={'class': 'author'})
print thetd.string

В HTML, который вы даете это в точности излучает:

####I want whatever is located here ###

, что похоже на то, что вы хотите. Возможно, вы можете лучше указать, что именно вам нужно, и этот сверхпростой фрагмент не подходит - несколько тегов td , все для класса author , из которых вам необходимо учитывать (все ? только некоторые? какие?), возможно, отсутствует какой-либо такой тег (что вы хотите сделать в этом случае) и тому подобное. Трудно сделать вывод, каковы именно ваши спецификации, только из этого простого примера и избыточного кода; -).

Изменить : если, согласно последнему комментарию OP, существует несколько таких тегов td, по одному на автора:

thetds = soup.findAll('td', attrs={'class': 'author'})
for thetd in thetds:
    print thetd.string

... то есть не намного сложнее! -)

11
ответ дан 6 December 2019 в 07:51
поделиться

BeautifulSoup, безусловно, канонический анализатор / процессор HTML. Но если у вас есть именно такой фрагмент, который вам нужно сопоставить, вместо построения всего иерархического объекта, представляющего HTML, pyparsing упрощает определение начальных и конечных HTML-тегов как части создания более крупного выражения поиска:

from pyparsing import makeHTMLTags, withAttribute, SkipTo

author_td, end_td = makeHTMLTags("td")

# only interested in <td>'s where class="author"
author_td.setParseAction(withAttribute(("class","author")))

search = author_td + SkipTo(end_td)("body") + end_td

for match in search.searchString(html):
    print match.body

Pyparsing makeHTMLTags функция делает гораздо больше, чем просто генерирует выражения "" и "" . Он также обрабатывает:

  • сопоставление тегов без регистра;
  • ""
1
ответ дан 6 December 2019 в 07:51
поделиться

или вы можете использовать pyquery, поскольку BeautifulSoup больше не поддерживается активно, см. http://www.crummy.com/software/BeautifulSoup/3.1-problems.html

, сначала установите pyquery с помощью

easy_install pyquery

, тогда ваш сценарий может быть таким же простым, как

from pyquery import PyQuery
d = PyQuery('http://mywebpage/')
allauthors = [ td.text() for td in d('td.author') ]

pyquery использует синтаксис селектора css, знакомый по jQuery, который я считаю более интуитивным, чем BeautifulSoup. Он использует lxml внизу и намного быстрее, чем BeautifulSoup. Но BeautifulSoup - это чистый питон, и поэтому он также работает на движке приложений Google

6
ответ дан 6 December 2019 в 07:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: