Добавить пробелы в парсинге Beautifoulsuop HTML .text python - PullRequest
0 голосов
/ 27 мая 2020

Я анализирую некоторые HTML данные и пытаюсь разобрать текст, но когда я не получаю желаемого результата.

HTML Фрагменты того, что я анализирую:

ПРИМЕР 1

<p class="elementor-image-box-description">Online Raffle<br/>Shipping<br/>Closes 28/05<br/><br/></p>

ПРИМЕР 2

<p class="elementor-image-box-description">Online Release<br/>Shipping<br/>More Info here<br/><br/></p>

ПРИМЕР 3

<p class="elementor-image-box-description">Instagram Raffle<br/>Collection (Hong Kong)<br/>Closes 05/28<br/><br/></p>

Код, который я использую для синтаксического анализа:

info = div.find('p').text

Вывод для примера:

ПРИМЕР 1

Online RaffleShippingCloses 28/05

ПРИМЕР 2

Online ReleaseShippingMore Info here

ПРИМЕР 3

Instagram RaffleCollection (Hong Kong)Closes 05/28

Ожидаемый результат:

ПРИМЕР 1

Online Raffle Shipping Closes 28/05

ПРИМЕР 2

Online Release Shipping More Info here

ПРИМЕР 3

Instagram Raffle Collection (Hong Kong) Closes 05/28

Ответы [ 3 ]

0 голосов
/ 27 мая 2020
from bs4 import BeautifulSoup
import lxml
import re

with open('a.html', 'r') as filee:
  temp = filee.read()
  s = re.sub('<br/>', ' ', temp)
  soup = BeautifulSoup(s, 'lxml')
  for temp_p in soup.find_all("p"):
    print(temp_p.text)

#Online Raffle Shipping Closes 28/05  
#Online Release Shipping More Info here  
#Instagram Raffle Collection (Hong Kong) Closes 05/28

Я просто использовал re для замены <br/> пробелом, а затем запустил программу

0 голосов

Самый простой способ - заменить info = div.find('p').text на info = soup.find('p').get_text(separator=' ').

Я пробовал это на моем локальном хосте с вашим примером. Вот как я это сделал. Python код:

import requests
from bs4 import *
page = requests.get("http://127.0.0.1/bs.html")
soup = BeautifulSoup(page.content, 'html.parser')
info = soup.find('p').get_text(separator=' ')
print(info)

Вывод:

Online Raffle Shipping Closes 28/05
0 голосов
/ 27 мая 2020

Для EXAMPLE 1, самый простой способ - заменить info = div.find('p').text на info = soup.find('p').getText(separator=u' '), вы можете попробовать:

html_doc = """<p class="elementor-image-box-description">Online Raffle<br/>Shipping<br/>Closes 28/05<br/><br/></p>"""

soup = BeautifulSoup(html_doc, 'lxml')

info = soup.find('p').getText(separator=u' ')

print(info)

print(info)

Вывод:

Online Raffle Shipping Closes 28/05

То же самое должно сделать для остальных.

...