可以用BeautifulSoup编辑内联代码吗?

1 投票
2 回答
1787 浏览
提问于 2025-04-15 18:05

我知道可以用beautifulsoup来编辑文本,那我能不能编辑链接呢?我想把比如说 <a href="/foo/bar/"> 这个链接,改成 <a href="http://www.foobarinc.com/foo/bar/">。我不太清楚该怎么用beautifulsoup来做到这一点,有谁能帮帮我吗?非常感谢!

2 个回答

3

尽管提问者在评论中对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。

(???), 提问者最好试着修改我刚刚发的代码,让它越来越接近自己的代码,直到出现那些奇怪的错误 [none] returnedKeyError:href (???):在那时,最后一次导致这些错误出现的修改应该能清楚地指出提问者哪里出错了——如果还是不明白,就把数据和代码精确地发出来,像我一样,并且把完整的错误信息复制粘贴过来(不要用模糊的个人描述!),我相信我们能帮到你!-)

6

就像你在其他问题中提到的,使用BeautifulSoup时,你是在解析内容,把它变成一组有层次的对象,这些对象代表了文档的结构。然后你会修改这些对象,再把它们转回不同的文本。其实你并不是直接在编辑文本。

在标记中,href="..."部分代表一个属性。要访问BeautifulSoup中每个元素的属性,你可以使用el[name]这种方式来获取。所以,如果你想把属性中的相对网址改成绝对网址,其实很简单:

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

撰写回答