BeautifulSoup - 修改一段HTML中的所有链接?

Eva*_*ark 18 python beautifulsoup

我需要能够修改HTML文档中的每个链接.我知道我需要使用它,SoupStrainer但我不是100%肯定如何实现它.如果有人可以指导我找到一个好的资源或提供一个代码示例,我们将非常感激.

谢谢.

Lus*_*sid 39

也许这样的事情可行吗?(不幸的是,我面前没有Python解释器)

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup('<p>Blah blah blah <a href="http://google.com">Google</a></p>')
for a in soup.findAll('a'):
  a['href'] = a['href'].replace("google", "mysite")

result = str(soup)
Run Code Online (Sandbox Code Playgroud)


Eva*_*ark 29

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup('<p>Blah blah blah <a href="http://google.com">Google</a></p>')
for a in soup.findAll('a'):
    a['href'] = a['href'].replace("google", "mysite")
print str(soup)
Run Code Online (Sandbox Code Playgroud)

这是Lusid的解决方案,但由于他在他面前没有Python解释器,他无法测试它并且它有一些错误.我只是想发布工作条件.谢谢Lusid!

  • @PeterRowell:`soup.findAll('a', href=True)` 确保 `a['href']` 有效 (4认同)
  • 您可能想要检查那些您正在测试的元素没有href的糟糕的HTML边缘情况. (2认同)
  • `soup.prettify()`对于人类的眼睛来说比"str(汤)"更容易. (2认同)

Azi*_*lto 6

我试过这个并且它有效,更容易避免使用regexp来匹配每个'href':

from bs4 import BeautifulSoup as bs
soup = bs(htmltext)
for a in soup.findAll('a'):
    a['href'] = "mysite"
Run Code Online (Sandbox Code Playgroud)

bs4 docs上查看它.