0
  • 如何删除地址行之间的多余空行?我正在使用 Beautifulsoup从网页中抓取。
  • 我知道这会<br/>产生一条新线。但是,如果我要使用替换空间或条带():少数地址行变成一行。如何保持我仍然有一些地址行,如下面的预期输出所示?

来自 html 的输入:

<span class="c2">1233/B, LAC II, St. 37/B, Mehmoodabad # 6, (Behind United Bakery),<br />Karachi - 75640<br />Pakistan</span><br />

我的代码如下:

if not (item.find('span', class_ = 'c2') is None):
        address = item.find_all('span', class_ = 'c2')
        for a in item.find_all('span', {"class":"c2"}):
            for addr in address:
                print('Before',addr)           
                    if addr.find_all("br"):
                        for a in addr:
                            print('a',a)
                            if '<br/>' in a: 
                                print('a loop',a)

                    

我的类(c2)跨度输出如下:

<span class="c2">1233/B, LAC II, St. 37/B, Mehmoodabad # 6, (Behind United Bakery),<br />Karachi - 75640<br />Pakistan</span><br />

在 span 的循环中测试输出结果如下

Before <span class="c2">1233/B, LAC II, St. 37/B, Mehmoodabad # 6, (Behind United Bakery),<br/>Karachi - 75640<br/>Pakistan</span>
a 1233/B, LAC II, St. 37/B, Mehmoodabad # 6, (Behind United Bakery),
a <br/>
a Karachi - 75640
a <br/>
a Pakistan      

这导致了我当前不受欢迎的输出结果:
1233/B, LAC II, St. 37/B, Mehmoodabad #6, (Behind United Bakery),

卡拉奇 - 75640

巴基斯坦

预期输出结果:
1233/B, LAC II, St. 37/B, Mehmoodabad #6,(Behind United Bakery),
Karachi - 75640
Pakistan

4

2 回答 2

0

您可以使用replace_with()标签对象的方法:

from bs4 import BeautifulSoup

data = '''<span class="c2">1233/B, LAC II, St. 37/B, Mehmoodabad # 6, (Behind United Bakery),<br />Karachi - 75640<br />Pakistan</span><br />'''

soup = BeautifulSoup(data, 'lxml')

for br in soup.select('br'):
    br.replace_with('\n')

print(soup.text.strip())

印刷:

1233/B, LAC II, St. 37/B, Mehmoodabad # 6, (Behind United Bakery),
Karachi - 75640
Pakistan
于 2019-06-16T13:58:03.283 回答
0

您可以使用剥离的字符串并加入

from bs4 import BeautifulSoup as bs

html = '''
<span class="c2">1233/B, LAC II, St. 37/B, Mehmoodabad # 6, (Behind United Bakery),<br />Karachi - 75640<br />Pakistan</span><br />
'''

soup = bs(html, 'lxml')
for item in soup.select('.c2'):
    strings = '\n'.join([string for string in item.stripped_strings])
    print(strings)
于 2019-06-16T14:22:24.400 回答