Можно ли редактировать встроенный код в BeautifulSoup? - PullRequest
1 голос
/ 16 января 2010

Мне известна возможность редактирования текста с BeautifulSoup, можно ли редактировать ссылки href? Я хотел бы иметь возможность сказать <a href="/foo/bar/"> и использовать beautifulsoup, чтобы изменить его на <a href="http://www.foobarinc.com/foo/bar/">. Я не уверен, как бы я использовал Beautifulsoup, чтобы сделать это? Любая помощь, высоко ценится.

Ответы [ 2 ]

6 голосов
/ 16 января 2010

Как и в вашем другом вопросе: с BeautifulSoup вы анализируете содержимое для набора иерархически вложенных объектов, представляющих документ, затем изменяете эти объекты перед сериализацией их обратно в другой текст. Вы не редактируете текст напрямую.

Часть href="..." разметки представляет атрибут. Для доступа к атрибутам каждого элемента в BeautifulSoup вы используете el[name] доступ в стиле элемента . Таким образом, чтобы изменить корневые URL-адреса на абсолютные в атрибутах a href, достаточно просто:

for link in soup.findAll('a'):
    if link['href'].startswith('/'):
        link['href']= 'http://www.foobarinc.com'+link['href']
3 голосов
/ 16 января 2010

Несмотря на то, что ОП говорит в комментарии к bobince, следующий код работает просто отлично:

from BeautifulSoup import BeautifulSoup

ht = '''
  <a href="/foo/bar/">Hello world</a>
'''
soup = BeautifulSoup(ht)

for link in soup.findAll('a'):
    if link['href'].startswith('/'):
        link['href']= 'http://www.foobarinc.com'+link['href']
print soup

испускает

<a href="http://www.foobarinc.com/foo/bar/">Hello world</a>

по желанию.Таким образом, вместо смутного заявления

я пробовал подобные вещи, но продолжал получать [ни один] не вернулся.Я не могу найти список словаря, который соответствует тегам.Я попробовал это, и он вернул KeyError: href.

(???), ОП лучше попытаться изменить код, который я только что опубликовал, приближая его к своему собственному, покапоявляются странные ошибки [none] returned и KeyError:href (???): в то время самое последнее изменение, сделавшее их, должно сделать очевидным, что ОП делает неправильно - если нет, опубликуйте точные данные и код, как и я, и точно скопированный и вставленный след ( не расплывчатые личные перефразировки! -), и я держу пари, что мы сможем помочь!

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