我(非常)是BeautifulSoup的新手,过去三天试图从http://www.ucanews.com/diocesan-directory/html/ordinary-of-philippine-cagayandeoro-parishes.html获取一系列教堂。
似乎数据没有正确嵌套,但只是为了演示目的而标记。据推测,层次结构是
Parishes
District
(data)
Vicariate
(data)
Church
(data)
然而,我所看到的是每个教堂都以子弹开头,每个入口由两个换行符隔开。我所追求的字段名称用斜体表示,并用“:”与实际数据分开。每个单位条目(区| Vicariate | Parish)可能有一个或多个数据字段。
到目前为止,我可以取消一些数据,但我无法显示实体的名称。
soup=BeautifulSoup(page)
for e in soup.table.tr.findAll('i'):
print e.string, e.nextSibling
最后,我希望逐列转换数据:district, vicariate, parish, address, phone, titular, parish priest, <field8>, <field9>, <field99>
希望在正确的方向上有一个好的推动。
答案 0 :(得分:2)
不幸的是,这会有点复杂,因为这种格式有一些您需要清晰标记所需的数据。
另外,您对嵌套的理解并不完全正确。实际的天主教会结构(不是这个文件结构)更像是:
District (also called deanery or vicariate. In this case they all seem to be Vicariates Forane.)
Cathedral, Parish, Oratory
请注意,没有要求,Parish属于区/ deanery,尽管他们通常会这样做。我认为该文件说区域后面列出的所有内容都属于该区域,但您无法确切知道。
那里还有一个不是教会而是社区的入口(San Lorenzo Filipino-Chinese Community)。这些在教会中没有明显的身份或治理(即它不是建筑物) - 相反,它是一个非地域的人群,牧师被指派照顾。
我认为你应该采取增量方法:
li
元素,每个元素都是“item”i
元素:这些是键,属性值,列行等i
(由br
分隔)的所有文字都是该密钥的值。 此页面的一个特殊问题是,其html 病态错误,您需要使用MinimalSoup
正确解析它。特别是{ {1}}认为BeautifulSoup
元素是嵌套的,因为文档中的任何位置都没有li
或ol
!
此代码将为您提供元组列表的列表。每个元组都是项目的ul
对。
拥有此数据结构后,您可以按照自己喜欢的方式进行规范化,转换,嵌套等,并将HTML保留在后面。
('key','value')