Как извлечь весь текст до запятой, точки или колина с веб-сайта, используя Python - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь разделить две адресные строки на 2 разные переменные при извлечении с веб-сайта, но некоторые местоположения имеют только 1 адрес. Я обнаружил, что обычно есть две запятые, разделенные запятой, двоеточием или точкой. Я извлекаю все местоположения, и этот веб-сайт является примером местоположения с двумя адресными строками. В этом случае адрес 1 будет 2 Hemlock Rd. и второй адрес будет PO Box 904. В других случаях, когда нет 2 адресов, адрес 2 должен быть пустым.

Это веб-сайт: https://www.winmar.ca/find-a-location/#267

И это код Python, а также html для веб-сайта.

location_address1 = soup.select_one(f"[data-id='{num}'] .heading:contains('Address') + p").contents[0].strip()
location_address2 = ','.join(location_address1.split(',|.|:')[1:]) 
<p>
2 Hemlock Rd. PO Box 904
<br>
Corner Brook, NL
<br>
A2H 6J2
</p>

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

Вы можете определить длину строк и соответствующим образом разобрать текст в переменную. см. пример ниже.

num = 267
location_address = soup.select_one(f"[data-id='{num}'] .heading:contains('Address') + p")
print(location_address)

#Determine the number of address lines
print(len(location_address.find_all('br')))

TotalLines = len(location_address.find_all('br'))
line1 =''
line2=''
if TotalLines >1:
    line1 = location_address.contents[0]
    line2 = location_address.contents[2]
else:
    line1 = location_address.contents[0]

print('Address Line1:',line1)
print('Address Line2:',line2)

Выход:

Адрес Line1: 2 Hemlock Rd. PO Box 904 Адрес Line2: Корнер-Брук, NL

0 голосов
/ 25 апреля 2020

Вам нужно лучше выбрать свой HTML вот решение. Я использовал CSS Селектор, так как он более точный; потому что на beautifoulSoup нет xPath. Получив все, что нам нужно, чтобы преобразовать объект в текст, а затем обойти доступный контент; тогда вот где мы разбиваем строки и удаляем разрывы строк для лучшего отступа.

Примечание: это было проверено и работает правильно.

Выполнить код:

import requests
from bs4 import BeautifulSoup

page = requests.get("https://www.winmar.ca/find-a-location/#267")

soup = BeautifulSoup(page.content, 'html.parser')

address = soup.select('#box-309 > div:nth-child(2) > p:nth-child(5)')

text = address[0].get_text()
print(text)

Выходы:

 358 Keltic Drive Sydney River ,NS B1R 1V7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...