XPath在Swift中无法正常工作
问题描述:
我在swift中使用Kanna从html获取数据。XPath在Swift中无法正常工作
当我做“html/body”作为Xpath时,我从站点获取了正文中的所有内容。当我做“/ html/body/center/table [1]/tbody/tr [1]”时,我什么也没得到,但是当我使用xpath测试器并填写“/ html/body/center/table [1]/tbody/tr [1]“我得到数据。
斯威夫特代码:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
if let doc = Kanna.HTML(url: (NSURL(string: "URL")!), encoding: NSUTF8StringEncoding) {
print(doc.title);
for link in doc.xpath("/html/body/center/table[1]/tbody/tr[1]") {
print(link.text)
// print(link["href"])
// print("test");
}
}
}
答
刚刚从你的XPath删除tbody/
段。您发布的链接的源没有<tbody>
元素:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head>
<title>Klasrooster, van 15-02-2016 t/m 15-04-2016</title>
<meta name=generator content="Paralax Rostar Eduflex Versie 3.508">
<!-- Dit bestand is automagisch aangemaakt. Handmatige wijzigingen kunnen verloren gaan. -->
<style type=text/css>
<!--
body, th, td { font-family: arial, verdana, geneva, times, helvetica, courier; font-size: 8pt; }
-->
</style>
</head><body><table border="1" width="100%">
<tr><th>Klasrooster, van 15-02-2016 t/m 15-04-2016</th></tr>
<tr><td><a href="2P02025.htm">TT.12MB.b</a></td></tr>
<tr><td><a href="2P02002.htm">TT.12ME.a</a></td></tr>
<!-- skipping many rows -->
<tr><td><a href="2P02202.htm">TT.RES2</a></td></tr>
<tr><td><a href="2P02038.htm">TT.RES3</a></td></tr>
</table>
<!-- XREF START -->
<table border="0" width="100%"><tr><td>[Vorige periode]</td><td><a href="../../index.htm">Overzichtspagina</a></td><td>[Volgende periode]</td></tr></table>
<!-- XREF END -->
</body></html>
我怀疑你使用的是Firefox或Chrome的“检查”功能,查看您的解析页面的HTML。问题在于它显示浏览器的DOM模型 - 而不是原始源。使用“查看源代码”功能查看原始HTML代码。
+0
你是完全正确的!谢谢!!! – LifeOS
上面的代码适用于我的简单HTML页面。你可以发布一个HTML页面的来源吗? – robinj
嗨,这里是一个示例站点:http://roosters.roc-teraa.nl/rooster_uitwisseling/techniek-technologie-college/2P0/2016021520160415/index.htm如果你做XPATH:/ html/body它显示所有的数据,但是如果你进一步像/ html/body/table [1]/tbody/tr [14],它不会在swift中显示任何内容。 – LifeOS