17

有人知道 xPath 到 JSoup 的转换器吗?我从 Chrome 获得以下 xPath:

 //*[@id="docs"]/div[1]/h4/a

并想将其更改为 Jsoup 查询。该路径包含我试图引用的 href。

4

7 回答 7

16

我使用的是Google Chrome 版本 47.0.2526.73 m(64 位),我现在可以直接复制与JSoup

带选择器选项的 Chrome



截图中元素的复制选择器span.com
#question > table > tbody > tr:nth-child(1) > td.postcell > div > div.post-text > pre > code > span.com

于 2015-12-08T12:41:32.640 回答
15

这很容易手动转换。

像这样的东西(未测试)

document.select("#docs > div:eq(1) > h4 > a").attr("href");

文档:

http://jsoup.org/cookbook/extracting-data/selector-syntax


评论中的相关问题

尝试在此处获取第一个结果的 href:cbssports.com/info/search#q=fantasy%20tom%20brady

代码

Elements select = Jsoup.connect("http://solr.cbssports.com/solr/select/?q=fantasy%20tom%20brady")
        .get()
        .select("response > result > doc > str[name=url]");

for (Element element : select) {
    System.out.println(element.html());
}

结果

http://fantasynews.cbssports.com/fantasyfootball/players/playerpage/187741/tom-brady
http://www.cbssports.com/nfl/players/playerpage/187741/tom-brady
http://fantasynews.cbssports.com/fantasycollegefootball/players/playerpage/1825265/brady-lisoski
http://fantasynews.cbssports.com/fantasycollegefootball/players/playerpage/1766777/blake-brady
http://fantasynews.cbssports.com/fantasycollegefootball/players/playerpage/1851211/brady-foltz
http://fantasynews.cbssports.com/fantasycollegefootball/players/playerpage/1860955/brady-earnhardt
http://fantasynews.cbssports.com/fantasycollegefootball/players/playerpage/1673397/brady-amack

开发者控制台的屏幕截图 - 抓取网址

在此处输入图像描述

于 2013-05-03T11:08:04.423 回答
4

您不一定需要将 Xpath 转换为 JSoup 特定的选择器。

相反,您可以使用基于 JSoup 并支持 Xpath 的 XSoup。

https://github.com/code4craft/xsoup

这是使用文档中的 XSoup 的示例。

@Test
public void testSelect() {

    String html = "<html><div><a href='https://github.com'>github.com</a></div>" +
            "<table><tr><td>a</td><td>b</td></tr></table></html>";

    Document document = Jsoup.parse(html);

    String result = Xsoup.compile("//a/@href").evaluate(document).get();
    Assert.assertEquals("https://github.com", result);

    List<String> list = Xsoup.compile("//tr/td/text()").evaluate(document).list();
    Assert.assertEquals("a", list.get(0));
    Assert.assertEquals("b", list.get(1));
}
于 2017-11-17T09:59:34.223 回答
2

我已经测试了以下 XPath 和 Jsoup,它可以工作。

示例 1:

[XPath]

//*[@id="docs"]/div[1]/h4/a

[JS汤]

document.select("#docs > div > h4 > a").attr("href");

示例 2:

[XPath]

//*[@id="action-bar-container"]/div/div[2]/a[2]

[JS汤]

document.select("#action-bar-container > div > div:eq(1) > a:eq(1)").attr("href"); 
于 2014-12-06T15:56:33.307 回答
2

这是使用 Xsoup 和 Jsoup 的独立代码片段:

import java.util.List;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import us.codecraft.xsoup.Xsoup;

public class TestXsoup {
    public static void main(String[] args){

            String html = "<html><div><a href='https://github.com'>github.com</a></div>" +
                    "<table><tr><td>a</td><td>b</td></tr></table></html>";

            Document document = Jsoup.parse(html);

            List<String> filasFiltradas = Xsoup.compile("//tr/td/text()").evaluate(document).list();
            System.out.println(filasFiltradas);

    }
}

输出:

[a, b]

图书馆包括:

xsoup-0.3.1.jar jsoup-1.103.jar

于 2017-07-19T10:04:55.720 回答
0

取决于你想要什么。

Document doc = JSoup.parse(googleURL);
doc.select("cite") //to get all the cite elements in the page

doc.select("li > cite") //to get all the <cites>'s that only exist under the <li>'s

doc.select("li.g cite") //to only get the <cite> tags under <li class=g> tags


public static void main(String[] args) throws IOException {
    String html = getHTML();
    Document doc = Jsoup.parse(html);
    Elements elems = doc.select("li.g > cite");
    for(Element elem: elems){
        System.out.println(elem.toString());
    }
}
于 2014-02-16T00:52:56.287 回答
0

尽管这个问题已经很老了,但我只想提一下,最新的 Jsoup 版本具有一些 Beta 功能,例如这个问题中要求的功能。

1.14.3版添加了本机 XPath 选择器。自己看:https ://jsoup.org/news/release-1.14.3

现在您可以使用 Jsoup 原生方法:

    File downloadedPage = new File("/path/to/your/page.html");
    String xPathSelector = "//*[@id="docs"]/div[1]/h4/a";
    Document document = Jsoup.parse(downloadedPage, "UTF-8");
    Elements elements = document.selectXpath(xPathSelector);

您可以遍历elements返回的!

于 2021-11-08T23:06:45.093 回答