使用BeautifulSoup的replaceWith将所有'a'标签替换为标签内容

时间:2013-03-11 21:47:29

标签: python html-parsing beautifulsoup

编辑:基本上,我正在尝试执行Decompose,但是我没有删除标签并完全销毁其内容,而是想用其内容替换标签。

我想用字符串格式的标签内容替换html文档中的所有'a'标签。这样可以让我更轻松地将html写入csv。然而,我无法通过替换步骤。我一直在尝试使用BeautifulSoup的replace_with()来完成它,但结果并没有像预期的那样回归。

# Import modules
from bs4 import BeautifulSoup
from urllib2 import urlopen

# URL to soup
URL = 'http://www.barringtonhills-il.gov/foia/ordinances_12.htm'
html_content = urlopen(URL).read()
soup = BeautifulSoup(html_content)

# Replaces links with link text
links = soup.find_all('a')
for link in links:
    linkText = link.contents[0]
    linkTextCln = '%s' % (linkText.string)
    if linkTextCln != 'None':
        link.replaceWith(linkTextCln)
        print link

返回:

<a href="index.htm">Home</a>
<a href="instruct.htm">Instructions</a>
<a href="requests.htm">FOIA Requests</a>
<a href="kiosk.htm">FOIA Kiosk</a>
<a href="geninfo.htm">Government Profile</a>
etc etc etc

但预期的回报是:

Home
Instructions
FOIA Requests
FOIA Kiosk
Government Profile
etc etc etc

有关为什么replaceWith没有按预期工作的任何想法?是否有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

我相信使用bs4,该方法现在为replace_with,但如果您只想输出标签的内容,则以下方法有效:

from bs4 import BeautifulSoup

s = '''
<a href="index.htm">Home</a>
<a href="instruct.htm">Instructions</a>
<a href="requests.htm">FOIA Requests</a>
<a href="kiosk.htm">FOIA Kiosk</a>
<a href="geninfo.htm">Government Profile</a>
'''
soup = BeautifulSoup(s, 'html.parser')

for tag in soup.findAll('a'):
    print(tag.string)

输出:

Home
Instructions
FOIA Requests
FOIA Kiosk
Government Profile
[Finished in 0.2s]