页面上的一个块被JavaScript的内容填充,在用Jsoup加载页面后,没有任何这些信息。有没有办法在用Jsoup
解析页面时也获得JavaScript生成的内容?
无法在此处粘贴页面代码,因为它太长:http://pastebin.com/qw4Rfqgw
下面是我需要的内容的元素:<div id='tags_list'></div>
我需要用Java获取这些信息。最好使用Jsoup。在JavaScript的帮助下,元素是字段:
<div id="tags_list">
<a href="/tagsc0t20099.html" style="font-size:14;">разведчик</a>
<a href="/tagsc0t1879.html" style="font-size:14;">Sr</a>
<a href="/tagsc0t3140.html" style="font-size:14;">стратегический</a>
</div>
Java代码:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
public class Test
{
public static void main( String[] args )
{
try
{
Document Doc = Jsoup.connect( "http://www.bestreferat.ru/referat-32558.html" ).get();
Elements Tags = Doc.select( "#tags_list a" );
for ( Element Tag : Tags )
{
System.out.println( Tag.text() );
}
}
catch ( IOException e )
{
e.printStackTrace();
}
}
}
发布于 2013-11-23 18:18:05
我真的有一个“方法”!也许这更像是一种“变通办法”,而不是“一种方式……下面的代码同时检查元属性”刷新“和javascript重定向……如果设置了其中任何一个存在的RedirectedUrl
变量,那么您就可以检索目标页面并继续...
String RedirectedUrl=null;
Elements meta = page.select("html head meta");
if (meta.attr("http-equiv").contains("REFRESH")) {
RedirectedUrl = meta.attr("content").split("=")[1];
} else {
if (page.toString().contains("window.location.href")) {
meta = page.select("script");
for (Element script:meta) {
String s = script.data();
if (!s.isEmpty() && s.startsWith("window.location.href")) {
int start = s.indexOf("=");
int end = s.indexOf(";");
if (start>0 && end >start) {
s = s.substring(start+1,end);
s =s.replace("'", "").replace("\"", "");
RedirectedUrl = s.trim();
break;
}
}
}
}
}
... now retrieve the redirected page again...
发布于 2018-12-06 22:27:15
指定用户代理后,我的问题就解决了。
https://github.com/jhy/jsoup/issues/287#issuecomment-12769155
发布于 2020-01-16 17:23:36
通过将JSoup
与另一个框架相结合来解释网页是可能的,在我的示例中,我使用了HtmlUnit
。
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
...
WebClient webClient = new WebClient();
HtmlPage myPage = webClient.getPage(URL);
Document document = Jsoup.parse(myPage.asXml());
Elements otherLinks = document.select("a[href]");
https://stackoverflow.com/questions/7488872
复制相似问题