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

标签 java android html parsing jsoup

我在这里遇到了一个奇怪的问题,我已经使用 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)

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

  1. 外星人...(类似于机器人,但更丑...)
  2. 网站编码。 (我尝试使用 ISO-8859-15 对传入的 HTML 进行编码,以处理葡萄牙语特殊字符,但问题仍然存在)
  3. 传入的 HTML 格式不正确。 (我怀疑这可能是问题所在,因为选择器在“尝试 jsoup 在线网页”上工作正常,并且 Jsoup 通常可以很好地处理损坏的 HTML)
  4. 在类名中使用减号(“-”)会扰乱 Jsoup。 (在我看来,这是问题的主要原因(或至少是一个))
  5. 还有其他事情...(很可能!)
<小时/>

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

*[class*=zincontent-wrap]

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

<小时/>

SO...要恢复,我所需要做的就是完全按照该网页的操作进行操作,但是使用代码。

提前感谢您提供有关此问题的任何说明或解决方法! :)

最佳答案

解决方案!... 毕竟,正如我所怀疑的,上面代码中的所有内容都工作正常,除了...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();

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

关于java - Jsoup - CSS 查询选择器问题(?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17060335/

相关文章:

java - Android只有15个音量位置,如何使用java更精确地调整它?

java - 正则表达式中的 ^ 和 $ 是什么意思?

java - 为什么使用 DataSource 而不是 XADataSource?

java - Android dex 问题 : nested class + final boolean : com. android.dex.util.ExceptionWithContext

javascript - querySelectorAll vs NodeIterator vs TreeWalker - 最快的纯 JS 平面 DOM 迭代器

java - Eclipse 没有在断点处停止/中断?

java - ListView 中的复选框

android - android源码中CTS的使用

javascript - 在 VueJS 中循环包含两个不同数组的对象

php - 将菜单添加到我的后导航?