我这么多年来一直在努力,一定是做了些蠢事。在
我试图检索所有可能支持Wikipedia的语言,并通过遍历List_of_Wikipedias上的表将它们输出到文本文件中。在
下面是我目前为止的python代码,它只是尝试检索其中一个表:
import httplib
from lxml import etree
def main():
conn = httplib.HTTPConnection("meta.wikimedia.org")
conn.request("GET","/wiki/List_of_Wikipedias")
res = conn.getresponse()
root = etree.fromstring(res.read())
table = root.xpath('//table')
print table
main()
在我的机器上这只打印一个空列表。为了提高速度,我在本地缓存了页面并使用:
^{pr2}$但这没有任何影响(除了明显的加速)。我也试过了
lxml.find('table')
以及:
for element in root.iter():
print("%s - %s" % (element.tag, element.text))
它成功地打印出了所有元素,所以我知道树正在被创建。在
我做错什么了?在
任何帮助都将不胜感激。 谢谢。在
您的问题是文档中的元素名称位于默认命名空间中。如何编写包含这些元素名的XPath表达式是XPath中最常见的问题,soxpath标记中有许多很好的答案。只需搜索它们。在
这里有一个完整的解决方案:
使用:
^{pr2}$其中注册了绑定到前缀
"x"
的XHTML命名空间("http://www.w3.org/1999/xhtml"
)。在当我根据从以下位置获得的文档计算此XPath表达式时:http://s23.org/wikistats/wikipedias_html
我需要在文档的开头添加以下内容,因为我在本地工作,没有XHTML的DTD,也许您不需要这些:
将上述XPath表达式应用于此文档的结果是:
注意事项:每秒钟选定的节点都是一个仅限空白的文本节点。如果不想选择这些选项,请使用:
XPath需要命名空间。您下载的页面开始:
所以你真的想要
^{pr2}$其中
html
是绑定到"http://www.w3.org/1999/xhtml"
的前缀您必须了解如何在lxml中绑定名称空间-我不是python专家。在
如果这是你的问题,我表示同情-它已经把我和其他许多人弄出来了!在
将其解析为html。在
输出
^{pr2}$相关问题 更多 >
编程相关推荐