繁体   English   中英

XPATH使用包含和跟随同级

[英]XPATH using contains and following-sibling

我知道有很多关于此的文章,但是在涉及Web抓取时,XPath似乎是我的弱点。 即使我确信它是正确的,以下内容似乎也不起作用。

基本上,我正在寻找包含文本“枢轴点第二级阻力”的td,并采用以下同级td值。 什么地方出了错?

字符串RS2 = doc.DocumentNode.SelectSingleNode(“ // td [contains(text(),'Pivot Point 2nd Level Resistance'']] / following-sibling :: td [1]”)。InnerText

以下是我要抓取的内容:

 <tr data-ng-repeat="point in cheatSheetData | filter:categoryFilter" data-ng-class="point.class" class="high support-resistance"> <td class="label support-resistance highlight" data-ng-class="{'highlight': point.labelSupportResistance}"> Pivot Point 2nd Level Resistance </td> <td class="value"> 9.43 </td> <td class="label pivot-points" data-ng-class="{'highlight': point.labelTurningPoints}"> </td> </tr> 

编辑:事实之后,我尝试抓取的网站数据似乎已更改为加载,因此在我抓取期间节点不可用。 我通过为无头浏览器设置Phantom&Selenium的方法进行了测试,并且效果很好。 这不是我要走的路线,但已发现问题。

路径表达式中的步骤由/分隔,因此您希望//td[contains(text(),'Pivot Point 2nd Level Resistance')]/following-sibling::td[1]在语法上有意义。 我将放弃text()并使用//td[contains(. ,'Pivot Point 2nd Level Resistance')]/following-sibling::td[1]

当我尝试使用HTMLAgilityPack的最新NuGet包和代码编写.NET 4.6.1控制台程序时

            string html = @"<html><body><table><tr data-ng-repeat=""point in cheatSheetData | filter:categoryFilter"" data-ng-class=""point.class"" class=""high support-resistance"">
                <td class=""label support-resistance highlight"" data-ng-class=""{'highlight': point.labelSupportResistance}"">
                    Pivot Point 2nd Level Resistance
                </td>
                <td class=""value"">
                    9.43
                </td>
                <td class=""label pivot-points"" data-ng-class=""{'highlight': point.labelTurningPoints}"">

                </td>
</tr></table></body></html>";

            HtmlDocument doc = new HtmlDocument();
            doc.LoadHtml(html);

            string RS2 = doc.DocumentNode.SelectSingleNode("//td[contains(text(),'Pivot Point 2nd Level Resistance')]/following-sibling::td[1]").InnerText;

            Console.WriteLine(RS2);

它输出

                9.43

因此基于XPath很好。

您可能需要编辑问题以告诉我们您获得了什么结果,并尝试在尝试失败的地方添加最少但完整的输入和代码片段。

在确认XPath正确无误后,我继续使用无头浏览器(Phantom Driver&Selenium)测试了我的代码,XPath现在返回一个值。 似乎网站已更改,现在尚未生成节点。 不是我要走的路,但是发现了问题。

如果有人感兴趣,这是我的完整代码:

IWebDriver driver = new PhantomJSDriver();
driver.Navigate().GoToUrl(Url);

string RS2 = driver.FindElement(By.XPath("//td[contains(.,'Pivot Point 2nd Level Resistance')]/following-sibling::td[1]")).Text;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM