Я знаю о возможности редактирования текста с помощью beautifulsoup, можно ли редактировать ссылки href? Я хотел бы иметь возможность сказать <a href="/foo/bar/">
и использовать beautifulsoup, чтобы изменить его на <a href="http://www.foobarinc.com/foo/bar/">
. Я не уверен, как я буду использовать beautifulsoup для этого? Любая помощь, очень ценится.
Как и в другом вопросе: с помощью 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']
Несмотря на то, что OP говорит в комментарии к 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>
по желанию. Итак, вместо того, чтобы смутно заявить
Я пытался с этим поделать, но продолжал получать [none]. я не может найти список словарей который соответствует тегам. Я попробовал это, и он вернул KeyError: href.
(???), OP лучше попытаться изменить код, который я только что опубликовал, приблизив его ближе к его собственному, пока не появятся странные ошибки [none] returned
и KeyError:href
(???): at в то время, самое последнее изменение, которое заставило их появиться, должно было наглядно показать, что ОП делает неправильно - если нет, отправляйте точные данные и код, как и я, и точно скопированную и вставленную трассировку ( не смутные личные перефразировки!), и я уверен, мы сможем помочь! -)