以下链接为我们提供了食谱清单中的成分列表。我想提取成分的名称,并使用python将其保存到另一个文件。 http://stream.massey.ac.nz/file.php/6087/Eva_Material/Tutorials/recipebook.xml
到目前为止,我已经尝试使用以下代码,但它给了我完整的配方而不是成分的名称:
from xml.sax.handler import ContentHandler
import xml.sax
import sys
def recipeBook():
path = "C:\Users\user\Desktop"
basename = "recipebook.xml"
filename = path+"\\"+basename
file=open(filename,"rt")
# find contents
contents = file.read()
class textHandler(ContentHandler):
def characters(self, ch):
sys.stdout.write(ch.encode("Latin-1"))
parser = xml.sax.make_parser()
handler = textHandler( )
parser.setContentHandler(handler)
parser.parse("C:\Users\user\Desktop\\recipebook.xml")
file.close()
如何提取每种成分的名称并将其保存到另一个文件中?
答案 0 :(得分:3)
@Neha
我想你现在已经解决了你的请求,这是我在http://lxml.de/tutorial.html使用教程时放在一起的一小部分。 XML文件保存在'rough_data.xml'
中import xml.etree.cElementTree as etree
xmlDoc = open('rough_data.xml', 'r')
xmlDocData = xmlDoc.read()
xmlDocTree = etree.XML(xmlDocData)
for ingredient in xmlDocTree.iter('ingredient'):
print ingredient[0].text
对于所有有经验的Python程序员来说,请仔细改进这个“新手”代码。
注意:lxml包看起来非常好,绝对值得使用。 感谢
答案 1 :(得分:1)
请放置相关的XML文本以获得正确的答案。另外,请考虑使用lxml来获取特定于xml的内容(包括html)。
试试这个:
from lxml import etree
tree=etree.parse("your xml here")
all_recipes=tree.xpath('./recipebook/recipe')
recipe_names=[x.xpath('recipe_name/text()') for x in all_recipes]
ingredients=[x.getparent().xpath('../ingredient_list/ingredients') for x in recipe_names]
ingredient_names=[x.xpath('ingredient_name/text()') for x in ingredients]
这只是开始,但我想你从这里得到了想法 - >从每个成分名称获取父母,从那里获取成分/数量,依此类推。由于文档的结构化特性,你不能真正做任何其他类型的搜索。
您可以在[www.lxml.de]
上阅读更多内容答案 2 :(得分:0)
前段时间我做了一系列的截屏视频,解释了如何从网站收集数据。代码在Python中,有2个关于使用 lxml 库进行XML解析的视频。所有视频都发布在此处:http://railean.net/index.php/2012/01/27/fortune-cowsay-python-video-tutorial
你想要的是:
您将学习如何编写和测试XPath查询,以及如何在Python中运行此类查询。这些例子很简单,我希望你会发现它们很有帮助。