Сохранить многострочные адреса, разделенные `<br/>` - PullRequest
0 голосов
/ 16 июня 2019
  • Как убрать лишнюю пустую строку между адресной строкой?Я использую Beautifulsoup для удаления с веб-страницы.
  • Я знаю, что <br/> создает новую строку.Однако, если бы я использовал замену на пробел ИЛИ strip (): несколько строк адреса становятся одной строкой.Как я могу сохранить, что у меня все еще есть несколько адресных строк, как показано в ожидаемом выводе ниже?

ввод из 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 />

Тестовый выводрезультат в цикле промежутка следующим образом :

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, (позади United Bakery),

Карачи - 75640

Пакистан

Ожидаемый результат:
1233 / B, LAC II, St. 37 / B, Mehmoodabad # 6, (позади United Bakery),
Карачи - 75640
Пакистан

Ответы [ 2 ]

0 голосов
/ 16 июня 2019

Вы можете использовать раздетые строки и присоединиться

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)
0 голосов
/ 16 июня 2019

Вы можете использовать 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
...