问题描述:
我想打印<span>
标签里面的文本,该标签位于<a>
标签内。 我要打印37里面<span class="rep-score">37</span>
jsoup从<a>标签中获取文本标签
<a href="//*.com"
class="site-link js-gps-track"
data-id="1"
data-gps-track="
site.switch({ target_site:1, item_type:3 }),
site_switcher.click({ item_type:1 })">
<div class="site-icon favicon favicon-*" title="Stack Overflow"></div>
Stack Overflow
<span class="rep-score">37</span>
</a>
下面是我写这样做的代码,但没有被打印出来。
有人可以解释为什么它不起作用。
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.jsoup.*;
import org.jsoup.nodes.*;
import java.io.*;
import org.jsoup.nodes.Document;
class Repoo
{
static int count=0;
// String html;
public static void main(String s[])throws IOException
{
try{
// Document doc=Jsoup.connect("http://www.javatpoint.com/java-tutorial").get();
// Document doc=Jsoup.connect("http://*.com/").get();
Document doc = Jsoup
.connect("http://www.*.com")
.userAgent("Google Chrome/48.0.2564.116 m")
.get();
// System.out.println("doc");
// Elements link=(Elements)doc.select("span[class]");
// Elements select=doc.select(".site-icon favicon favicon-*");
Elements select=doc.select("a.site-link js-gps-track > span.rep-score");
// Elements link=(Elements)doc.select("div");
// Elements link = doc.select("span").first();
// Elements link = (Elements)doc.select("span");
// Elements link = (Elements)doc.select("a[href]");
for(Element el: select)
{
// System.out.print("-");
// String repo=el.attr("class");
System.out.println(el.text());
// System.out.println(el.ownText());
// if(repo.equals("rep-score"))
// {
// System.out.println(el.attr("class"));
// System.out.println(el.text());
// }
// System.out.println(el.attr("id"));
// count++;
// String str=el.attr("href");
// System.out.println(str);
}
// System.out.println("<"+count+">");
}catch(IOException e){System.out.println(e);}
}
}
答
您的代码没有派登录到堆栈溢出所以你正在为不包含任何<span class="rep-score">37</span>
标签未注册的用户响应页面所需的任何凭据。
你可以尝试
- 使用登录页面发送所需凭证,然后再使用返回的cookie(详细信息:jsoup posting and cookie)
- 使用Stack Overflow API(可能是首选的方法)
顺便说一句,如果你想要选择<a ..>
与少数类简单地将它们与a.class1.class2
而不是a.class1 class2
,因为这样的选择器将尝试找到a.class1
和th en <class2 ..>
标记。
所以,如果你将能够通过jsoup登录并获得doc
这实际上将包含span
你应该能够
Elements select=doc.select("a.site-link.js-gps-track > span.rep-score");
// ^-we combine few classes with `.`
哪里是你的Java代码来选择呢? – Reimeus
对不起,我粘贴的代码没有发布。 – a874
@ Reimeus,现在我该如何发布我的代码。帮助 – a874