在android中使用jsoup选择器时产生ParseException的nth-child(偶数)?

Posted

技术标签:

【中文标题】在android中使用jsoup选择器时产生ParseException的nth-child(偶数)?【英文标题】:nth-child(even) generating ParseException while using jsoup selector in android? 【发布时间】:2015-10-22 19:38:27 【问题描述】:

例外:

org.jsoup.select.Selector$SelectorParseException: Could not parse query 'table:nth-child(even)': unexpected token at ':nth-child(even)

代码:

Document doc = Jsoup.connect(URL+params[0]).userAgent("Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/44.0.2403.125 Safari/537.36")
                    .referrer("http://www.google.com").get();  

Elements questions= doc.select(".content-box table:nth-child(even) a");

content-box 是 div 的类名。 jsoup中nth-child()方法有什么问题?

nth-child() 在http://try.jsoup.org/ 站点中工作,但在android 中使用时出现异常。

Logcat:

W/System.err(2280): org.jsoup.select.Selector$SelectorParseException: Could not parse query 'table:nth-child(even)': unexpected token at ':nth-child(even)'
W/System.err(2280):     at org.jsoup.select.QueryParser.findElements(QueryParser.java:170)    
W/System.err(2280):     at org.jsoup.select.QueryParser.parse(QueryParser.java:63)
W/System.err(2280):     at org.jsoup.select.QueryParser.parse(QueryParser.java:37)
W/System.err(2280):     at org.jsoup.select.QueryParser.combinator(QueryParser.java:79)
W/System.err(2280):     at org.jsoup.select.QueryParser.parse(QueryParser.java:59)
W/System.err(2280):     at org.jsoup.select.QueryParser.parse(QueryParser.java:37)
W/System.err(2280):     at org.jsoup.select.Selector.<init>(Selector.java:66)
W/System.err(2280):     at org.jsoup.select.Selector.select(Selector.java:79)
W/System.err(2280):     at org.jsoup.nodes.Element.select(Element.java:255)
W/System.err(2280):     at com.example1.MainScreen$MyTask.doInBackground(MainScreen.java:80)
W/System.err(2280):     at com.example1.MainScreen$MyTask.doInBackground(MainScreen.java:1)
W/System.err(2280):     at android.os.AsyncTask$2.call(AsyncTask.java:288)
W/System.err(2280):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err(2280):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
W/System.err(2280):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
W/System.err(2280):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
W/System.err(2280):     at java.lang.Thread.run(Thread.java:841)

【问题讨论】:

你能发布网站的网址吗?您确定在浏览器和应用程序中获得完全相同的结果吗?你在修改应用的UserAgent吗? URL: (putlocker.is/search/search.php?q=spider%20man),我在浏览器和应用程序中得到两个不同的结果。在浏览器 (try.jsoup.org) 中,我得到了所有锚标签,但在应用程序中,除了异常之外什么也没有。 UserAgent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36 可以添加下载页面的代码吗? Document doc = Jsoup.connect(URL+params[0]).userAgent("Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36").referrer("google.com").get(); 它对我有用。我已经尝试过您的代码(在AsyncTask 中)并得到类似&lt;a href="http://putlocker.is/watch-the-amazing-spider-man-2-online-free-putlocker-552120.html" title="The Amazing Spider-Man 2 (2014)"&gt;&lt;b&gt;The Amazing Spider-M..&lt;/b&gt;&lt;/a&gt;&lt;a href="http://putlocker.is/watch-the-amazing-spider-man-2-online-free-putlocker-552120.html" title="The Amazing Spider-Man 2 (2014)"&gt;&lt;img src="http://image6.putlocker.is/images/covers/the-amazing-spider-man-2-online-free-putlocker-552120.jpg" border="0" style="padding:1px;border:1px solid silver;" alt="The Amazing Spider-Man 2"&gt;&lt;/a&gt; 的结果 【参考方案1】:

OP 找到的解决方案:

现在它正在工作,在我更新了 jsuoup.jar 文件 (jsoup.org/packages/jsoup-1.8.2.jar) 之后。我认为这是旧版本的问题。

【讨论】:

以上是关于在android中使用jsoup选择器时产生ParseException的nth-child(偶数)?的主要内容,如果未能解决你的问题,请参考以下文章

Android实战——jsoup实现网络爬虫,糗事百科项目的起步

JSoup 解析带有未闭合标签的无效 HTML

Android实战——jsoup实现网络爬虫,糗事百科项目的起步

无法在 Android Studio 中使用 jsoup

在 android studio 中使用 Jsoup 解析 xml 数据

当用户取消意图选择器时是不是有事件?