Форум сайта python.su
Добрый день. Стоит такая задача.
Есть текст. Текст нужно распределить по столбцам exel. Столбцы; Название компании, Имя и фамилия, Адрес, номер телефона, электронная почта. Сложность в том что текст может начинаться с алфавита, потом номера страницы и далее выше перечисленное(столбцы которые указывал выше.). Пример текста ниже(кусок текста).
Пока что хватило знаний написать вот эту часть. Заранее спасибо.
from bs4 import BeautifulSoup
import requests
url = "https://fliphtml5.com/cmxpr/dlsm/2023_Membership_Directory/"
r = requests.get(url)
soup = BeautifulSoup(r.text, ‘lxml’)
tear = soup.find_all('p')
C
C Can Store Inc.
Jessica Fielding
#16 11010 46th St SE
Calgary, AB T2C 4Z5
Canada
(403) 452-8889
Bobbi Malana
#16 11010 46th St SE
Calgary, AB T2C 4Z5
Canada
(403) 452-8889
Mel Malana
#16 11010 46th St SE
Calgary, AB T2C 4Z5
Canada
(403) 452-8889
23
Calida Inc.
David Potvin
173, rue Joseph-Gagne Nord
La Baie, QC G7B 4T2
Canada
(418) 718-3130
Marie-Pier Simard
173, rue Joseph-Gagne Nord
La Baie, QC G7B 4T2
Canada
(418) 290-8051
D
D. Edward Leasing Company
Douglas Dively
250 Seanor Road
Windber, PA 15963
(800) 635-8756
Brian Mowery
250 Seanor Road
Windber, PA 15963
(814) 467-5434
Crossroads Trailer Rental
John Bransford
2621 Corner Rock Road
Mian-Midlothian, VA 23113
(804) 378-6222
CS Leasing
Vanessa Garcia
16945 Northchase Drive, Ste 2140
Houston, TX 77060
(28) 137-7200
Rick Reid
14510 Beaumont Highway
Houston, TX 77049
(832) 418-2499
CSI Group LLC
Heidi Gibert
1212 Hancock St
Suite 305
Quincy, MA 02169
(617) 845-5249
Stephan Howard
1212 Hancock St
Suite 305
Quincy, MA 02169
(617) 797-9766
Jessie Morris
1212 Hancock St
Suite 305
Quincy, MA 02169
(617) 845-5246
MEMBERSHIP ROSTER
39
Dakota Containers
Kelly Torrence
PO box 742
Sturgis, SD 57785
(605) 884-5500
H
H.D.S. Mobile Storage
Jimmy Hawley
PO Box 1121
Lindale, TX 75771
(903) 882-4839
Haashold Storage
Dennis Haas
5221 Pleasant Ridge School Road
Freeburg, IL 62243
(618) 531-2731
Hale Trailer Brake and Wheel, Inc.
Jason Dâamico
PO Box 1400
Voorhees, NJ 08043
(856) 786-1330
Hamilton Container Services Inc.
Wally Hansan
6360 W. Emerald Parkway
Building 2 Unit 108-111
Monee, IL 60449
(708) 906-5188
Hammar Lift, Inc.
David Gustafsson
417 1st Ave
Dallas, TX 75226
(949) 293-0028
Grand View Container Trading - USA
James Granada
8350 NW 52nd Terrace
Suite 209
Doral, FL 33166
(305) 406-0348
Giovanna Nastasi
8350 NW 52nd Terrace
Suite 209
Doral, FL 33166
(786) 210-4443
with open(“index.html”, “w”, encoding=“utf-8”) as file:
for line in tear:
file.write(line.text + ‘\n’)
Отредактировано DOTTRAM (Май 22, 2024 21:38:21)
Офлайн
Весьма простая задача
Смотри: в независимости от того что у тебя идет в начале каждого блока, мы наблюдаем стабильные значения с конца каждого блока
0. C
1. C Can Store Inc.
2. Jessica Fielding
3. #16 11010 46th St SE
4. Calgary, AB T2C 4Z5
5. Canada
6. (403) 452-8889
Офлайн
DOTTRAMНадо сначала почистить эти записи. Сначала чистишь все записи от букв алфавита, чтобы их не осталось. Потом, после этого, чистишь все записи от номеров страниц, чтобы их тоже не было больше. И вот уже после этого ты можешь эти чистые записи, очищенные от всего ненужного, обрабатывать, чтобы разложить их на отдельные поля.
Сложность в том что текст может начинаться с алфавита, потом номера страницы и далее выше перечисленное(столбцы которые указывал выше.).
Отредактировано py.user.next (Май 23, 2024 09:18:18)
Офлайн
py.user.next
Прикреплённый файлы:
Screenshot_1.jpg (158,8 KБ)
Офлайн
ZerG
Весьма простая задачаСмотри: в независимости от того что у тебя идет в начале каждого блока, мы наблюдаем стабильные значения с конца каждого блока
Прикреплённый файлы:
Screenshot_1.jpg (158,8 KБ)
Офлайн
И там всё слитно. Это просто я разделил. Чтобы понятно было что требуется. А так всё выглядит вот так.
C Can Store Inc.
Jessica Fielding
#16 11010 46th St SE
Calgary, AB T2C 4Z5
Canada
(403) 452-8889
Bobbi Malana
#16 11010 46th St SE
Calgary, AB T2C 4Z5
Canada
(403) 452-8889
Mel Malana
#16 11010 46th St SE
Calgary, AB T2C 4Z5
Canada
(403) 452-8889
CAI International Inc.
Maria Bauer
56 Leslie Road
Colonia, NJ 07067
(732) 397-7116
Terry Wei
11744 Bartlett Ave
Adelanto City, CA 92301
(626) 861-6200
Vicky Zhao
11744 Bartlett Ave
Adelanto City, CA 92301
(626) 861-6200
BTS
Steve Hossa
10 South La Salle Ave
Suite 1910
Chicago, IL 60611
(708) 426-9149
Budget Box Mobile Storage
Jay Williams
12549 East Skelly Drive
Tulsa, OK 74128
(918) 234-3444
Built Rite Industries
Craig Rapoza
19523 S. Susana Rd.
Compton, CA 90221
(562) 366-0784
Grant Rapoza
19523 S. Susana Rd.
Compton, CA 90221
(562) 366-0784
BuiltBox LLC
Sam Popa
PO Box 5903
Springfield, MO 65801
(417) 705-0797
MEMBERSHIP ROSTER
23
Офлайн
DOTTRAMНу от мусора ты должен сначала почистить всё. Не бойся обрабатывать один и тот же текст много-много раз. То есть первый раз ты проходишь и удаляешь только номера страниц и больше ничего. Второй раз по тексту без номеров страниц, так как они уже удалены, ты проходишь и удаляешь буквы алфавита и больше ничего. Третий раз ты проходишь по тексту без номеров страниц и без букв алфавита и вставляешь там разделители записей, например. Четвёртый раз ты проходишь и уже берёшь каждую запись по разделителю записи и, если у этой записи есть имя компании, то оставляешь его, а если у этой записи нет имени компании, то добавляешь его, как будто оно там было. В итоге у тебя получаются полные записи, разделённые конкретным разделителем записей. И вот после этого всего ты уже имеешь чистые и подготовленные данные для разделения на поля. Дальше ты просто проходишь по этим записям, отделяешь их друг от друга по конкретному разделителю записи, а не приблизительно, и потом передаёшь в функцию разделения одной записи на отдельные поля. В каждой записи у тебя будет имя компании, имя человека, адрес, телефон. Так ты получаешь уже список словарей, где каждый словарь - это одна запись, разделённая по полям.
Дело в том что у одной компании могут быть несколько контактов.
DOTTRAMВот видишь, да, вот эти две строки? Вот ни первой строки, ни второй строки не должно быть в обрабатываемых данных. Где ты вот это сделал - удалил мусор? Нигде. Вот сейчас ты будешь сидеть и отделять через предикат какой-нибудь, что “вот это - мусор, его не надо на поля раскладывать”, а потом дальше “а вот это данные нужные, их надо на поля разложить”. В итоге у тебя мешанина получается и ты сам не знаешь, как отделить поля от мусора, а мусор от полей. А всё потому, что ты не почистил их. Ты не почистил картошку, а бросил её вариться в кастрюлю прямо так, прямо в земле, прямо в кожуре и так далее. Посчитал это неважным, типа “ну а чо такого? главное, чтобы она сварилась”.MEMBERSHIP ROSTER
23
Отредактировано py.user.next (Май 24, 2024 04:21:47)
Офлайн