【发布时间】:2014-11-20 01:33:58
【问题描述】:
我有一组包含非结构化数据的 7 个文件,我试图将这些文件解析为使用 beautifulsoup 获得的 7 个不同的 Python 数据集。数据的呈现方式有很多种,我正在努力通过正则表达式或其他解析包找到合适的方法。
我将一个 sn-p 数据粘贴到 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) 将带有逗号的地址(例如 lr.sitimulyo i-vi、ia-iiia)放在单独的行上,保持完整的街道名称
2) 消除两个字母前缀句点后的空格(例如 lr.sitimulyo 与 jln.sidomulyo)
3) 删除嵌套地址的街道名称(例如 jln.akhmad dakhlan kel.ciamis、jln.akhmad dakhlan kel.linggasari)
我已经尝试了几种不同的方法,但甚至还没有达到很远的距离,所以我没有包括那些 sn-ps。我用来获取数据的代码如下:
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'))
【问题讨论】:
标签: python regex parsing data-structures beautifulsoup