@黄亿华 你好,想跟你请教个问题:
使用您的webmagic,在用Xpath选取页面元素时,选取不到。
描述:在CSS网页布局的网页中,使用是正常的,但是遇到使用表格进行网页布局的网站,再使用Xpath去页面元素,就取不回来了。
你可以用HtmlCleaner来试下是否支持siblingsindex。Spider.xsoupOff()
@黄亿华我 读过你的代码,包括你学习jsoup的文档,我对jsoup整体还是不太清楚。xsoup 是对jsoup的二次封装,jsoup node中有个siblingsindex属性,能不能封装下 Evaluator.IndexEquals来实现 “page.getHtml().xpath("/html/body/table[5]/tbody/tr/td[3]/table/tbody /tr[2]/td[1]/table/tbody/tr/td/a").links().all();”这种方式获取数据?
@黄亿华webmagic支持“/div[@class='Question']//div[@class='Content']/div[@class='detail']”,怎么不支持“page.getHtml().xpath("/html/body/table[5]/tbody/tr/td[3]/table/tbody/tr[2]/td[1]/table/tbody/tr/td/a").links().all();”这种方式?
在xpathparser中: private void findElements() { if (tq.matches("@")) { consumeAttribute(); } else if (tq.matches("*")) { allElements(); } else if (tq.matchesRegex("\w+\(.*\)")) { consumeFunction(); } else if (tq.matchesWord()) { byTag(); } else if (tq.matches("[@")) { byAttribute(); } else if (tq.matchesRegex("\[\d+\]")) { byNth(); } else { // unhandled throw new Selector.SelectorParseException("Could not parse query '%s': unexpected token at '%s'", query, tq.remainder()); }
}
其中的“tq.matchesRegex("\[\d+\]")”不是对例如“table[5]”这种方式处理了,怎么不可以用?
webmagic支持“/div[@class='Question']//div[@class='Content']/div[@class='detail']”,怎么不支持“page.getHtml().xpath("/html/body/table[5]/tbody/tr/td[3]/table/tbody/tr[2]/td[1]/table/tbody/tr/td/a").links().all();”这种方式?
@Timco ,有的网站是没问题的,给你个网址,帮忙试试:http://www.agri.com.cn/tech/index_tech.asp?borderid=1&title=%C7%EB%D0%B4%C8%EB%B9%D8%BC%FC%B4%CA
没问题的呀-.-肯定是你输入的表达式不对
@黄亿华 ,谢谢您的回答。
表格布局的话,xpath只能靠嵌套层次来写了,效果会差一点。如果不行的话,建议用正则表达式做辅助。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(9)
你可以用HtmlCleaner来试下是否支持
siblingsindex。Spider.xsoupOff()
@黄亿华
我 读过你的代码,包括你学习jsoup的文档,我对jsoup整体还是不太清楚。xsoup 是对jsoup的二次封装,jsoup node中有个siblingsindex属性,能不能封装下 Evaluator.IndexEquals来实现 “page.getHtml().xpath("/html/body/table[5]/tbody/tr/td[3]/table/tbody /tr[2]/td[1]/table/tbody/tr/td/a").links().all();”这种方式获取数据?
@黄亿华
webmagic支持“/div[@class='Question']//div[@class='Content']/div[@class='detail']”,怎么不支持“page.getHtml().xpath("/html/body/table[5]/tbody/tr/td[3]/table/tbody/tr[2]/td[1]/table/tbody/tr/td/a").links().all();”这种方式?
在xpathparser中:
private void findElements() {
if (tq.matches("@")) {
consumeAttribute();
} else if (tq.matches("*")) {
allElements();
} else if (tq.matchesRegex("\w+\(.*\)")) {
consumeFunction();
} else if (tq.matchesWord()) {
byTag();
} else if (tq.matches("[@")) {
byAttribute();
} else if (tq.matchesRegex("\[\d+\]")) {
byNth();
} else {
// unhandled
throw new Selector.SelectorParseException("Could not parse query '%s': unexpected token at '%s'", query, tq.remainder());
}
}
其中的“tq.matchesRegex("\[\d+\]")”不是对例如“table[5]”这种方式处理了,怎么不可以用?
webmagic支持“/div[@class='Question']//div[@class='Content']/div[@class='detail']”,怎么不支持“page.getHtml().xpath("/html/body/table[5]/tbody/tr/td[3]/table/tbody/tr[2]/td[1]/table/tbody/tr/td/a").links().all();”这种方式?
在xpathparser中:
private void findElements() {
if (tq.matches("@")) {
consumeAttribute();
} else if (tq.matches("*")) {
allElements();
} else if (tq.matchesRegex("\w+\(.*\)")) {
consumeFunction();
} else if (tq.matchesWord()) {
byTag();
} else if (tq.matches("[@")) {
byAttribute();
} else if (tq.matchesRegex("\[\d+\]")) {
byNth();
} else {
// unhandled
throw new Selector.SelectorParseException("Could not parse query '%s': unexpected token at '%s'", query, tq.remainder());
}
}
其中的“tq.matchesRegex("\[\d+\]")”不是对例如“table[5]”这种方式处理了,怎么不可以用?
@Timco ,有的网站是没问题的,给你个网址,帮忙试试:
http://www.agri.com.cn/tech/index_tech.asp?borderid=1&title=%C7%EB%D0%B4%C8%EB%B9%D8%BC%FC%B4%CA
@Timco ,有的网站是没问题的,给你个网址,帮忙试试:
http://www.agri.com.cn/tech/index_tech.asp?borderid=1&title=%C7%EB%D0%B4%C8%EB%B9%D8%BC%FC%B4%CA
没问题的呀-.-肯定是你输入的表达式不对
@黄亿华 ,谢谢您的回答。
表格布局的话,xpath只能靠嵌套层次来写了,效果会差一点。如果不行的话,建议用正则表达式做辅助。