xml - 如何使用 xpath 表达式将多个文本节点选择为单个字符串?

标签 xml xpath web-scraping scrapy

我是 xpath 的新手,我正在尝试使用 scrapy 中的 xpath 表达式来抓取网站。 我试图抓取的页面结构是-

...
<div class="article-body">
<p class="body">Text1</p>
<p class="body">Text2</p>
<p class="body">Text3</p>
...

我正在尝试的 xpath 是-

//div[@class="article-body"]/p/text()

但我得到的只是Text1在我的数据库中。取而代之的是,我希望输出为-

Text1.Text2.Text3

我想我应该使用 concatstring-join或类似的功能。但我无法解决。由于我必须将此 xpath 表达式作为参数传递给 scrapy,因此我只需要将它作为单个表达式。

我试着给 concat 喂食功能进入我的 django-scraper as-

concat(//div[@class="article-body"]/p)

但它向我抛出了这个错误-

File "C:\Anaconda2\lib\site-packages\scrapy\selector\unified.py", line 100, in xpath raise ValueError(msg if six.PY3 else msg.encode("unicode_escape"))

我尝试时遇到了同样的错误(页面上没有其他 <p> 元素)-

concat(//p)

string-join(//p)

但是,当我尝试时,string(//p)我得到 Text1在我的数据库中。

最佳答案

你试过这个吗:-

concat(//div[@class="article-body"]/p)

String values = myTestDriver.findElement(By.xpath("concat(//div[@class="article-body"]/p)"));

你需要做这样的事情

    ArrayList<String> name;
    String name1;
    List<WebElement> options = myTestDriver.findElements(By.xpath("//div[@class="article-body"]/p"));
    System.out.println(options.size());
    for(int i=0 ; i<options.size() ; i++){
        System.out.println(options.get(i).getText());
        name1 = options.get(i).getText();
        name.add(name1);
    }

现在你可以执行连接了

关于xml - 如何使用 xpath 表达式将多个文本节点选择为单个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34543787/

相关文章:

java - 读/写期间的 XmlBeans 源定位器

c# - 针对 XSD 验证 XML 的最高效方法

javascript - 使用 Node.js、request 和 Cheerio 从网站上抓取链接?

r - 明确设计用于测试 Web Scraping 应用程序的网站

python - 从网页上抓取 2 个不同格式的表格 - Beautiful Soup

jquery - 使用 jQuery 在 ID 具有类时显示内容

xml - FOP 的好替代品?

xpath - 如何在 eXist-db 中使用 XQuery 和/或 XSLT 从我的 XML 创建 SVG 条形图

XPath 2.0 : how to select the current node - current() no longer available

javascript - Javascript 是否具有给定文档的原始源代码的内部知识?