Как найти ссылки и изменить HTML, используя BeautifulSoup в Python - PullRequest
1 голос
/ 25 мая 2010

Начиная с ввода HTML, как это:

<p>
<a href="http://www.foo.com">this if foo</a>
<a href="http://www.bar.com">this if bar</a>
</p>

используя BeautifulSoup, я хотел бы изменить этот HTML-код в:

<p>
<a href="http://www.foo.com">this if foo[1]</a>
<a href="http://www.bar.com">this if bar[2]</a>
</p>

сохранение проанализированных ссылок в словаре с таким результатом:

links_dict = {"1":"http://www.foo.com","2":"http://www.bar.com"}

Возможно ли это сделать с помощью BeautifulSoup? Любая действительная альтернатива?

1 Ответ

4 голосов
/ 25 мая 2010

Это должно быть легко в Beautiful Soup.

Что-то вроде:

from BeautifulSoup import BeautifulSoup
from BeautifulSoup import Tag

count = 1
links_dict = {}
soup = BeautifulSoup(text)
for link_tag in soup.findAll('a'):
  if link_tag['href'] and len(link_tag['href']) > 0:
    links_dict[count]  = link_tag['href']  
    newTag = Tag(soup, "a", link_tag.attrs)
    newTag.insert(0, ''.join([''.join(link_tag.contents), "[%s]" % str(count)]))
    link_tag.replaceWith(newTag)
    count += 1

Результат выполнения этого над вашим текстом:

>>> soup
<p>
  <a href="http://www.foo.com">this if foo[1]</a>
  <a href="http://www.bar.com">this if bar[2]</a>
</p>

>>> links_dict
{1: u'http://www.foo.com', 2: u'http://www.bar.com'}

Единственная проблема, которую яМожно предусмотреть с помощью этого решения, если ваш текст ссылки содержит подтэги;тогда ты не сможешь сделать ''.join(link_tag.contents);вместо этого вам нужно перейти к крайнему правому текстовому элементу.

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