Поиск и замена в HTML с BeautifulSoup

Я хочу использовать BeautfulSoup, чтобы искать и заменить <\a> с <\a><br>. Я знаю, как открыться urllib2 и затем синтаксический анализ для извлечения весь <a> теги. То, что я хочу сделать, искать и заменить закрывающий тэг закрывающим тэгом плюс повреждение. Любая справка, очень ценившая.

Править

Я предположил бы, что это будет что-то подобное:

soup.findAll('a').

В документации существует a:

find(text="ahh").replaceWith('Hooray')

Таким образом, я предположил бы, что это будет вроде:

soup.findAll(tag = '</a>').replaceWith(tag = '</a><br>')

Но это не работает, и справка Python () не дает много

9
задан Kevin 15 January 2010 в 17:55
поделиться

2 ответа

Это будет вставить Тег после конца каждого ... элемент:

from BeautifulSoup import BeautifulSoup, Tag

# ....

soup = BeautifulSoup(data)
for a in soup.findAll('a'):
    a.parent.insert(a.parent.index(a)+1, Tag(soup, 'br'))

Вы не можете использовать SUP.findall (Tag = '' ) Поскольку BeautifulSoup не работает на торцевых метках отдельно - они считаются частью одного и того же элемента.


Если вы хотите поставить элементы в , элемент

, когда вы спрашиваете в комментарии, вы можете использовать это:

for a in soup.findAll('a'):
    p = Tag(soup, 'p') #create a P element
    a.replaceWith(p)   #Put it where the A element is
    p.insert(0, a)     #put the A element inside the P (between <p> and </p>)

снова, вы не понимаете «Создать

и отдельно, потому что они являются частью того же.

17
ответ дан 4 December 2019 в 08:33
поделиться

Вы не заменяете конечный тег; В Booksoupsoup вы имеете дело с моделью объекта документа, как в браузере, а не строка, полная HTML. Таким образом, вы не можете «заменить» конечный тег, не заменив старт-тег.

То, что вы хотите сделать, это вставить новый элемент элемент ... элемент. Для этого вам нужно выяснить индекс элемента в его родительском элементе и вставьте новый элемент сразу после этого индекса. например.

soup= BeautifulSoup('<body>blah <a href="foo">blah</a> blah</body>')
for link in soup.findAll('a'):
    br= Tag(soup, 'br')
    index= link.parent.contents.index(link)
    link.parent.insert(index+1, br)
# soup now serialises to '<body>blah <a href="foo">blah</a><br /> blah</body>'
3
ответ дан 4 December 2019 в 08:33
поделиться
Другие вопросы по тегам:

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