Jsoup - CSS 查询选择器问题 (?)

Posted

技术标签:

【中文标题】Jsoup - CSS 查询选择器问题 (?)【英文标题】:Jsoup - CSS Query selector issue (?) 【发布时间】:2013-06-08 06:15:16 【问题描述】:

我在这里遇到了一个奇怪的问题,我使用 Jsoup 1.7.2 有一段时间了,没有任何问题,只是现在,当我尝试从该网站检索主要标题时:www.jornaldamarinha.pt,使用以下代码:

// Connecting...
Document doc = Jsoup.connect("http://www.jornaldamarinha.pt")
                    .timeout(0)
                    .get();

// "*[class*=zincontent-wrap]" in "Jsoup idiom", means:  
// Select all tags that contains classes with "zincontent-wrap" on its name.
Elements elems = doc.select("*[class*=zincontent-wrap]"); // Retrieves 0 results!

int t = elems.size();
Log.w("INFO", "Total Headlines: " + t);

// Loop trought all retrieved headlines:
for (Element e : elems) 
   String headline = e.select("a").text().toString();
   Log.w("HEADLINE", headline);
;

失败了!... 检索到 0 个结果。 (应该检索到〜8)

问题可能是由以下原因引起的:

    外星人... (类似于机器人,但更丑...) 网站编码。 (我尝试使用 ISO-8859-15 对传入的 html 进行编码,以处理葡萄牙语特殊字符,但问题仍然存在) 格式错误的传入 HTML。 (我怀疑这可能是问题所在,因为选择器在“试用 jsoup 在线网页”上工作正常,而且 Jsoup 通常可以很好地处理损坏的 HTML) 在类名中使用减号(“-”)会影响 Jsoup。 (在我看来,这是问题的主要(或至少是一个)原因) 别的东西……(很可能!)

但是...http://try.jsoup.org 如果我使用此 CSS 查询获取 URL:http://www.jornaldamarinha.pt:

*[class*=zincontent-wrap]

一切都很好,那里! (检索所有 ~8 个正确结果!)


所以...要恢复,我只需要完全按照该网页的功能进行操作,但要使用代码。

在此先感谢您提供有关此问题的任何提示或解决方法! :)

【问题讨论】:

【参考方案1】:

解决方案!... 毕竟,正如我所怀疑的,上述代码中的所有内容都正常工作,除了... CSS 查询在 android 的“默认用户代理”上中断。我只是认为将“userAgent”设置为 Jsoup 的连接方法非常很重要!所以,我已经按照以下方式编辑了我的代码,并且......现在就像一个魅力! (与http://try.jsoup.org 网页中的结果完全相同)

Document doc = Jsoup.connect("http://www.jornaldamarinha.pt")
                    .userAgent("Mozilla/5.0 Gecko/20100101 Firefox/21.0")
                    .timeout(0)
                    .get();

希望这对其他人也有帮助! :)

【讨论】:

以上是关于Jsoup - CSS 查询选择器问题 (?)的主要内容,如果未能解决你的问题,请参考以下文章

详解JSOUP的select选择器语法

用于在 PHP 中解析 HTML 的 CSS 选择器

Jsoup

HTML&XML解析器--Jsoup

Jsoup学习总结

Jsoup :has() 选择器未按预期工作