XPath的主要目的是解决XML文档的各个部分。它还提供操纵弦乐,数字和布尔值的基本设施。 XPath使用紧凑的非XML语法。 XPath在XML文档的抽象逻辑结构上运行,而不是表面语法。
在这段代码上抓取 h2 时遇到了一些麻烦: 只是在刮擦此代码上的 h2 时遇到一些麻烦: <div id="content"> <div class="title-wrapper"> <article class="article"> <figure> <a title="Ölüm Denizi" href="http://trfilmizle.com/olum-denizi.html"> <img class="small-poster" alt="Ölüm Denizi" src="http://i706.photobucket.com/albums/ww64/ddizi/TRfilmizle/OumlluumlmDenizi_zpsc809f300.jpg~original"> </a> </figure> <div class="article-container"> <h2> <a title="Ölüm Denizi" href="http://trfilmizle.com/olum-denizi.html">Ölüm Denizi</a> </h2> <div class="article-info"> <div class="description"> Kuzey Kore, Güney Kore ve Çin arasına sıkışmış Yanji kentinde geçen Ölüm Denizi, araba kovalamacaları, cinayetler ve bıçaklı kavgalarla dolu… </div> </div> 有什么想法吗?我可以通过以下方式访问节点: //article[@class='article']/text() 但是,拿不到h2!有什么建议吗? 这应该获取 h2s: 中 div 元素下方的所有文本组件 //div/h2//*/text() 更具体地说,您可以将其限制为特定的div: //div[@class='article-container']/h2//*/text() 使用这个preg_match_all() <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <?php $source= '<div id="content"> <div class="title-wrapper"> <article class="article"> <figure> <a title="Ölüm Denizi" href="http://trfilmizle.com/olum-denizi.html"> <img class="small-poster" alt="Ölüm Denizi" src="http://i706.photobucket.com/albums/ww64/ddizi/TRfilmizle/OumlluumlmDenizi_zpsc809f300.jpg~original"> </a> </figure> <div class="article-container"> <h2> <a title="Ölüm Denizi" href="http://trfilmizle.com/olum-denizi.html">Ölüm Denizi</a> </h2> <div class="article-info"> <div class="description"> Kuzey Kore, Güney Kore ve Çin arasına sıkışmış Yanji kentinde geçen Ölüm Denizi, araba kovalamacaları, cinayetler ve bıçaklı kavgalarla dolu… </div> </div>'; preg_match_all('#<h2>(.*?)</h2>#is', $source, $output, PREG_PATTERN_ORDER); print_r($output[1][0]); exit;
带有数字函数的 XPath 1.0 谓词与 XSLT 输入中的所有非零值不匹配
我正在使用 xsltproc 命令并使用 number() 函数从谓词获得意外的输出。通过再现器来解释是最简单的。 复制者: 输入 我正在使用 xsltproc 命令并使用 number() 函数从谓词获取意外输出。通过再现器来解释是最简单的。 复制者: 输入 <top> <constraint> <lifetime> <rule id="rule1" original="1"/> <rule id="rule2" original="1"/> </lifetime> </constraint> <constraint> <lifetime> <rule id="rule3" original="1"/> <rule id="rule4" original="1"/> </lifetime> </constraint> </top> 样式表 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:strip-space elements="*"/> <xsl:output encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/> <xsl:template match="/|@*|node()" name="identity"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="top"> <xsl:for-each select="constraint/lifetime/rule[number(@original)]"> <item> <xsl:copy-of select="."/> </item> </xsl:for-each> </xsl:template> </xsl:stylesheet> 实际产量 <item> <rule id="rule1" original="1"/> </item><item> <rule id="rule3" original="1"/> </item> 预期产量 <item> <rule id="rule1" original="1"/> </item><item> <rule id="rule2" original="1"/> </item><item> <rule id="rule3" original="1"/> </item><item> <rule id="rule4" original="1"/> </item> 如果我从 number(@original) 更改为 number(@original) = 1 或 @original = '1',我会得到预期的结果。如果我在 if 中使用 for-each 而不是使用 XPath 谓词,我也会得到预期的结果: <xsl:for-each select="constraint/lifetime/rule"> <xsl:if test="number(@original)"> <item> <xsl:copy-of select="."/> </item> </xsl:if> </xsl:for-each> number(@original) 始终在您的情况下返回 1。 IE。 XPath constraint/lifetime/rule[number(@original)] 表示 constraint/lifetime/rule[1],即元素 rule 中的第一个元素 lifetime。 如果你想检查@original是数字,那么你需要使用这个条件: constraint/lifetime/rule[number(@original) = @original] 或者 constraint/lifetime/rule[string(number(@original)) != 'NaN']
我想使用scrapy从此表中提取一些书籍链接。 该表如下所示: 我想使用 scrapy 从此表中提取一些书籍链接。 表格看起来像这样: <table id="table_text"> <tbody> <tr > <td>15/02/2014</td> <td><a href="/book_1.html">Book 1</a></td> <td>The Author</td> <td> <a href="/tag1">tag1</a> <a href="/tag2">tag2</a> </td> <td>Genre</td> </tr> 提取的链接应该是: /book_1.html 我使用的选择器是 def parse(self, response): hxs = Selector(response) hxs = Selector(response) links = hxs.xpath('//table[@id="table_text"]//tr//td[2]//a//@href') 但是 print links 显示空输出:[] 我想知道我使用的xpath有什么问题吗? 根据您提供的信息,您的 XPath 工作正常。它可以简化为 //table[@id="table_text"]//tr/td[2]/a/@href 但是您的版本返回正确的节点。 当 scrapy 遇到意外行为时,请尝试始终检查它收到的 HTML 是否是您期望的 HTML。 使用浏览器和 scrapy 检索的 HTML 可能会有所不同,因为 scrapy 不处理 Javascript(并且某些浏览器会尝试清理 HTML)。 这就是为什么你应该检查response.body的内容是否是你所期望的。如果不是,您需要找到解决方法:) 2014年2月15日
我是 XML 路径语言的新手。我想要的是使用一个工具来获取 XPath 以在脚本中使用来抓取内容。 例如: 在 http://econpy.pythonanywhere.com/ex/001.html 我想...
R-高级网页抓取-使用 xmlTreeParse() 绕过 aspNetHidden
这个问题需要一点时间来介绍,请耐心等待。如果你能到达那里,解决这个问题将会很有趣。该抓取将使用循环复制到该网站上的数千个页面。 我是
如何在同一循环和行中获取Tag内部文本和属性值HtmlAgilityPack C#
以下是我正在处理的 HTML; (C# 项目) ` 以下是我正在处理的 HTML; (C# 项目) </TR> <TR> `<TD ALIGN="center"> <INPUT TYPE="checkbox" NAME="f0" VALUE="14652 4-76-17-7-2024-R" ONCLICK=uncheck("f0")> </TD> <TD> </TD> <TD>76/07-17</TD> <TD>14652</TD> <TD> </TD> <TD>9.3</TD> <TD> 78 </TD> <TD> </TD> <TD> </TH> </TR> 我可以通过循环获取 tr[td] 内部文本。 但在同一个循环中,我无法访问“输入”属性(名称/值)以将值提取为数组以维护数据完整性。 HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(page); foreach (var row in doc.DocumentNode.SelectNodes("//tr[td]")) //textBox5.Text { table.Rows.Add(row.SelectNodes("td").Select(td => td.InnerText).ToArray()); string namee1 = row.InnerText; //These works but without the attribute details. string Code_num = row.SelectSingleNode("//td//input").Attributes["value"].Value; // this gives only the first value without looping. MessageBox.Show(namee); } Code_num - 仅给我第一个值,而不循环遍历文档。 属性不选择,我只得到空引用。我对 linq 不太熟悉。如果可能的话,更喜欢 xpath 的帮助。 感谢您的帮助!提前致谢 期望输出如下; 第 1 列 / 第 2 列 / 第 3 列 / 第 4 列 / 第 5 列 / 第 6 列 / 第 7 列 / 第 8 列 / 第 9 列 / 第 10 列 / 第 11 列 / /76/07-17/14652/ /9.3/ 78 / / /F0 / 14652 4-76-17-7-2024-R 预期输出 以下内容对我有用!由于早期值不完整,因此空引用阻塞了我的代码。 希望这对某人有帮助!! foreach (var row in doc.DocumentNode.SelectNodes("//tr[td]")) { string pos = "0"; pos = row.SelectSingleNode("td//input")?.Attributes["name"].Value; string injid = row.SelectSingleNode("td//input")?.Attributes["value"].Value; table.Rows.Add((row.SelectNodes("td").Select(td => td.InnerText).ToArray())); if (string.IsNullOrEmpty(pos)) { } else { int ronum = table.Rows.Count - 1; DataRow dr = table.Rows[ronum]; dr[9] = pos; } if (string.IsNullOrEmpty(injid)) { } else { int ronum = table.Rows.Count - 1; DataRow dr = table.Rows[ronum]; dr[10] = injid; } }
/div[包含(text(),"逆变器")] 这是我们当前使用 xpath 映射 selenium 中的一些对象的代码。现在的问题是,他们现在将软连字符引入到他们的...
在 Python 中使用 etree.XPath 并使用联合运算符“|”时如何修复“XPath 语法错误:无效表达式”
我正在尝试在 Python 中使用 etree.XPath 编译 XPath 表达式,但遇到语法错误。这是代码片段: XPATH = '//桥域/(桥域组名称|桥域...
问题:为 XPath 上下文注册默认 NS 的正确方法是什么? 我已经浏览了很多关于注册 NS 的帖子(主要是非 C++ 和 Google 搜索),但我找不到任何内容......
is_enabled 在 Python Selenium 的循环中每次都返回 true
我有下面的代码用于搜索元素。如果未找到该元素,则单击下一页。我想要的是,如果直到最后一页才找到该元素,它应该打印“Elem...
我试图从每个列表中提取公司名称和地址并将其导出到 -csv,但我在输出 csv 时遇到问题。 我认为 bizs = hxs.select("//div[@class='listing_conte...
如何使用 XPath 执行不区分大小写的搜索并支持非英文字符?
我正在使用以下代码在 XML 文件中执行搜索: $result = $xml->xpath("//StopPoint[contains(StopName, '$query')]"); 其中 $query 是搜索查询,StopName 是名称...
如何从 simpleXML_Element_Object 中抓取内容?
我正在尝试从任何维基页面右侧的维基百科信息框中抓取内容。 我正在使用 DOMXpath 来抓取内容。 在此链接的信息框上(在...
在尝试独自完成这件事后,我挣扎了3个小时,我决定我自己做这件事要么不可能,要么不可能。 我的问题如下: 怎样才能刮掉
我的 XPath foo 还不够好,无法弄清楚如何执行以下操作。 我有一个类似于以下内容的 XML: 我的 XPath foo 还不够好,无法弄清楚如何执行以下操作。 我有一个类似于以下内容的 XML: <?xml version="1.0" encoding="UTF-8"?> <root> <books> <book> <name>Fantastic World of Peggy</name> <category>fiction</category> <author-ref>/SanDiego/Peter</author-ref> </book> </books> <cities> <name>SanDiego</name> <authors> <author> <name>Peter</name> <awards-won>true</awards-won> <pet>pike</pet> </author> </authors> </cities> </root> 现在我想访问该作者获奖的所有书籍。 我最终想到了以下 XPath(这不起作用): //books[category = 'fiction' and //author[name = string-after(<the-current-book>/author-ref, '/SanDiego/') and awards-won = 'true']] 我想在其中打印作者的昵称以及书名: //books[category = 'fiction']/concat(name, concat(' - ', //author[name = string-after(<the-current-book>/author-ref, '/SanDiego/') and awards-won = 'true']/pet)) <the-current-book> 必须是对外部条件下当前对象的书的引用。 我可以对城市部分进行硬编码,因为在我的 XML 中只有一个城市,但有很多书和很多作者。 我还没有找到如何在 XPath 中执行此操作。 关于如何做到这一点有什么建议吗? 我不太确定您正在寻找哪种输出,并且您没有指定 xpath 的版本,但这里有一个 XPath 3.1 选项... for $award_winning_author in /root/cities/authors/author[awards-won='true'] return let $author-ref := '/' || $award_winning_author/../../name || '/' || $award_winning_author/name return let $pet := if ($award_winning_author/pet) then ' (pet: ' || $award_winning_author/pet || ')' else '' return for $book in /root/books/book[author-ref=$author-ref] return $book/name || ' - ' || tokenize($author-ref,'/')[last()] || $pet 使用您的示例输入,这是输出... Fantastic World of Peggy - Peter (pet: pike)
我正在尝试查询表列名称作为 XML 节点的值,并在同一节点中添加另一个表中的值。我在其他帖子中找到了一个代码,可以从列名创建节点...
我尝试编写一个简单的PHP来抓取html页面。 不知道为什么我得不到结果? 这是我的一些 PHP 代码: //$html , 成功获取“http://m.hkolden.com/topics.aspx...
我使用 XPath 抓取内容。我必须抓取的是具有给定 id 的 div 中的内容。在这个 div 里面还有另一个 div,我不想抓取其中的内容。 我使用以下 XPath: //[@...
当文本没有整齐地包含在标签中时,如何在 selenium 中获取文本?
“3228” <td data-title="Docket No.">"3228" <div class="cursor-pointer expand-collapse-container expand-document-name"> <div class="expand-arrow" aria-hidden="true"></div> <div class="collapse-arrow" aria-hidden="true"></div> </div> </td> 我正在使用 Selenium,想要获取下面的文本 <td data-title="Docket No."> 在本例中为“3228” 我尝试过: lastdocket=element.find_element(By.XPATH,'//*[@data-title="Docket No."]/text()').get_attribute('innerHTML') 程序崩溃,我得到: 消息:选择器无效 来自 javascript 错误:{"status":32,"value":"xpath 表达式 "//*[@data-title="Docket No."]/text()" 的结果是:[object Text]。它应该是一个元素。”} 然后我尝试从 xpath 表达式中删除 'text()' lastdocket=element.find_element(By.XPATH,'//*[@data-title="Docket No."]/').get_attribute('innerHTML') 当我打印“lastdocket”时得到这个: '3228<div class="cursor-pointer expand-collapse-container expand-document-name"><div class="expand-arrow" aria-hidden="true"></div><div class="collapse-arrow" aria-hidden="true"></div></div>' 我意识到我可以删除“3228”后面的标签,但是有没有办法只返回数字??? find_element方法只能返回一个元素,而不能返回文本节点(因此任何以/text()结尾的XPath都会失败)。 但是一旦找到元素,您就可以访问其 text 属性,该属性将返回“呈现的”文本,这不一定与 XPath string() 函数返回的内容完全相同。 https://www.selenium.dev/documentation/webdriver/elements/information/#text-content
我想计算 XML 中两个节点之间存在的节点。下面是一个演示 XML。 我想计算 XML 中两个节点之间存在的节点。下面是一个演示 XML。 <?xml version="1.0" encoding="UTF-8"?> <body> <a></a> <b></b> <b></b> <b></b> <a></a> <b></b> <a></a> <a></a> <b></b> <b></b> <a></a> </body> 我正在使用下面的 XSLT。 <xsl:template match="a"> <xsl:text>Number of B </xsl:text> <xsl:value-of select="count(preceding::a[1]/following::b)"/> </xsl:template> 我目前的输出。 <body> Number of B 0 <b></b> <b></b> <b></b> Number of B 6 <b></b> Number of B 3 Number of B 2 <b></b> <b></b> Number of B 2 </body> 但是我的预期输出如下。 <body> Number of B 0 <b></b> <b></b> <b></b> Number of B 3 <b></b> Number of B 1 Number of B 0 <b></b> <b></b> Number of B 2 </body> 这里基本上我想在每个a之间进行计数。 这是工作示例 http://xsltransform.net/6r5Gh3F 您可以做的是创建一个键,将 b 元素链接到下面的第一个 a 元素 <xsl:key name="b" match="b" use="generate-id(following-sibling::a[1])" /> 然后您可以计算当前 b 元素之前的 a 元素,如下所示: <xsl:value-of select="count(key('b', generate-id()))"/> 尝试这个 XSLT <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" indent="yes" /> <xsl:key name="b" match="b" use="generate-id(following-sibling::a[1])" /> <xsl:template match="a"> <xsl:text>Number of B </xsl:text> <xsl:value-of select="count(key('b', generate-id()))"/> </xsl:template> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet> 您可以计算以下b的数量,并减去以下b之后的a的数量: <xsl:template match="a"> <xsl:text>Number of B </xsl:text> <xsl:value-of select="count(following::b) - count(following::a/following::b)"/> </xsl:template>