Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Jsoup处理CSS类名中的空白_Java_Dom_Web Crawler_Jsoup - Fatal编程技术网

Java 使用Jsoup处理CSS类名中的空白

Java 使用Jsoup处理CSS类名中的空白,java,dom,web-crawler,jsoup,Java,Dom,Web Crawler,Jsoup,我想从此页面选择一些超市产品信息: 为此,我应该选择带有class“lstProd”的标签: 如果类名是“lstProd”,这将很容易,但问题是名称末尾的空格。我无法让Jsoup来处理这件事 我尝试了下面的代码和其他方法,但它总是得到一个空列表 org.jsoup.nodes.Document document = Jsoup.connect("http://www.angeloni.com.br/super/index?grupo=15022").get(); org.jsoup.s

我想从此页面选择一些超市产品信息:

为此,我应该选择带有class
“lstProd”
的标签:

如果类名是
“lstProd”
,这将很容易,但问题是名称末尾的空格。我无法让Jsoup来处理这件事

我尝试了下面的代码和其他方法,但它总是得到一个空列表

org.jsoup.nodes.Document document = Jsoup.connect("http://www.angeloni.com.br/super/index?grupo=15022").get();
    org.jsoup.select.Elements list = doc.select("ul.lstProd  ");
我想从html页面获取的代码片段:

<ul class="lstProd  ">
    <li>
        <span class="cod">CÓD. 1341372</span>
        <span class="lnkImgProd">
            <a href="/super/produto?grupo=15022&amp;idProduto=1341372">
                <img src="http://assets.angeloni.com.br/files/images/7/1B/C6/1341372_1_V.jpg" width="120" height="120"
                     alt="Creme Dental SORRISO Super Refrescante Tubo 90g">
            </a>
                    </span>
        <div class="RgtDetProd">
            <div class="boxInfoProd">
                <span class="descr">
                    <a href="/super/produto?grupo=15022&amp;idProduto=1341372">Creme Dental SORRISO Super Refrescante
                        Tubo 90g</a>

                                    </span>

                <ul class="lstProdFlags after">
                </ul>
            </div>
...
  • CÓD.1341372 “>
...
我认为您面临两个完全不同的问题:

  • Jsoup不会加载您认为它加载的站点。您指定的网站通过JavaScript呈现其内容,并在通过AJAX加载初始页面后加载一些内容。JSoup无法处理这个问题。您要么需要研究AJAX调用并直接使用Jsoup获取它们,要么使用selenium webdriver之类的工具在真正的浏览器中获取页面,从而按照预期呈现所有内容

  • CSS类名不能包含实际用途的空格1。在HTML中,空格用作类名之间的分隔符。因此
    相同。然而,在CSS选择器中,类名由
    .className
    指定,即点后跟类名。您可以像这样包含几个类:
    元素。选择(“.className1.className2”)

  • 1从技术上讲,您可以在CSS类中放置空格,但需要使用
    '\'
    对其进行转义。看到或


    编辑:更加精确地描述CSS类名CSS类名可以包含空格。
    而且
    不同

    我可以看到您有多个具有相同类名的

    检查或遍历此类元素的更好方法是通过第n个子元素
    
    因此,要找到所需的选择器,您可以使用
    #abaProd>ul:nth child(4)


    我明白。我使用jauntapi,这是一个简单的javaweb爬虫,它可以处理这个页面。但是Jaunt不是免费的,所以我搬到了JSoup。你知道其他可以处理这类事情的API吗?我觉得SeleniumWebDriver有点太重了?我很困惑。因为你说的那件事,这趟旅行也办不到。我将尝试webdriver。webdriver有一个绑定到HTML单元,这是一个纯Java的解决方案,而且是轻量级的。问题在于,它通常不像普通浏览器那样处理复杂的JavaScript。不过值得一试。下一个最好的选择是phantomjs绑定,它至少是无头的。我认为你关于CSS名称中空格的说法是误导性的。如果名称中有空格,则必须在HTML中转义。一个简单的
    \
    就可以了。如果不转义这些空格,它们将被视为类名之间的分隔符。看到或