2014-09-25 3 views
0

У меня есть группа из 7 файлов, содержащих неструктурированные данные, которые я пытаюсь проанализировать на 7 разных наборах данных в Python, которые я получил с помощью beautifulsoup. Существует несколько различных способов представления данных, и я изо всех сил стараюсь найти правильный метод с помощью регулярных выражений или других пакетов синтаксического анализа.Анализ неструктурированных данных из BeautifulSoup в структурированные наборы данных

я вставил фрагмент данных Pastebin: http://pastebin.com/sC9KbhbF

Выходные данные будут выглядеть следующим образом (я просто использовать трубу для разделения полей, чтобы проиллюстрировать, я хотел бы их как отдельные столбцы для вывода):

Street | City | Postal Code 
jln.sidomulyo i-vi | cepu | 58312 
jln.sitimulyo | cepu | 58312 
lr.sitimulyo i-vi | cepu | 58312 
lr.sitimulyo ia-iiia | cepu | 58312 
lr.sitimulyo ib-iiib | cepu | 58312 
lr.sitimulyo ic | cepu | 58312 
lr.sitimulyo iic | cepu | 58312 
jln.sorogo | cepu | 58313 
..... 
jln.akhmad dakhlan kel.ciamis | ciamis | 46211 
jln.akhmad dakhlan kel.linggasari | ciamis | 46216 
..... 

узоры, которые делают это трудно:
1) Ввод адреса запятыми (например, Л.Р. sitimulyo I-VI, IA-IIIA) по отдельным линиям, сохраняя полное название улицы
2) Исключите пробелы после. период f или двухбуквенные префиксы (например, жилая комната sitimulyo против jln.sidomulyo)
3) капает вниз название улицы для вложенных адресов (например, jln.akhmad dakhlan kel.ciamis, jln.akhmad dakhlan kel.linggasari)

Я попытался несколько различных методов, но есть даже не получил удаленно близко к далеко, поэтому я не включил эти фрагменты. Код, который я использовал для получения данных ниже:

from bs4 import BeautifulSoup 
import urllib2 
import re 
import bleach 
import pandas 

url_base = "http://www.indonesianewsonline.com/prangko/stamps" 

url_seed = url_base + "/kodepos.htm" 

content = urllib2.urlopen(url_seed).read() 

soup = BeautifulSoup(content) 

#print soup.prettify() 

additional_links = [] 

for link in soup.findAll('a', href=True, text=re.compile('Cities*')): 
    additional_links.append(link['href']) 

links_to_scrape = [url_base + "/" + s for s in additional_links] 

data_files = [] 

for s in links_to_scrape: 
    a = BeautifulSoup(urllib2.urlopen(s).read()) 
    data_files.append(a.findAll('pre')) 

ответ

0

Вот как это должно работать: Во-первых вы используете эти регулярные выражения и replecments, чтобы сделать ввод текста более управляемым:

",[ ]*\n[ ]*" replace this with a single comma "," 
"\.{2,}" replace this with a single whilte space " " 
", " (comma and space) replace it with a single comma "," 
"\. " (point a space) replace it with a single point "." 
"^[ ]*" any space at the start replace with nothign "" 

Тогда вы можно использовать это регулярное выражение

"(?<arg1>[^ ]*) (?<arg2>[^ ]*) (?<arg3>[^ ]*) (?<arg4>[0-9]*)[ ]*[\n\r]" 

Если мы возьмем ныне преобразованный первую линию

jln.sidomulyo i-vi cepu 58312 

вы получите (примечание arg1 actualy имеет новую схему линии Infront так что лучше проверить, если его настоящее и удалить его)

arg1: jln.sidomulyo 
arg2: i-vi 
arg3: cepu 
arg4: 58312 

если мы возьмем линии отформатированный как этот

lr.sitimulyo i-vi,ia-iiia,ib-iiib,ic,iic cepu 58312 

вы получить это (опять arg1 имеет символ новой строки на arg1 [0], который необходимо удалить)

arg1: lr.sitimulyo 
arg2: i-vi,ia-iiia,ib-iiib,ic,iic 
arg3: cepu 
arg4: 58312 

Здесь вам нужно будет itterate через rg2, когда вы разделите его на символ «,» и сделайте записи таким образом.

единственной проблемой являются эти линии

lr.taman siswa i-vii,ia,ib,v/17 cepu 58311 

Где у вас есть essentialy 5 пробельные (или больше я думаю) и essentialy arg1 потребности на все, что до этой части я предполагаю «I-VII, И.А. ib, v/17 ".Там должно быть простое решение для этого, но я не мог понять его

Упс забыл добавить строки, как этот

jln.sitimulyo cepu 58312 

Essentialy не имею arg4, так что вы просто посмотрите, если arg4 пуст или оленья кожа существует (не знаю, как это работает в python)

GL надеется, что это помогло

Смежные вопросы