2013-02-28 2 views
0

Я пытаюсь разобрать страницы (любой динамический парсер страницы). кодJsoup parsing html tag со страницы

Elements title = doc.select("title"); 
Elements metades = doc.select("meta[name=description]"); 

Как вы можете видеть, я хочу, чтобы извлечь название тега.

Он работает отлично на примерно каждый сайт, например hinddroid.com Но не смог разобрать название от google.com и youtube.com Я думаю, что это из-за отсутствия пространства между двумя метками. Большинство больших веб-сайтов не имеют места в html для экономии пропускной способности. Пожалуйста, предложите мне - я хочу разобрать html с сайта.

Полный код:

import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import java.sql.*; 
import java.util.regex.*; 

import org.jsoup.Jsoup; 
import org.jsoup.helper.Validate; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 

public class post_link extends HttpServlet 
{ 
@Override 
public void doGet(HttpServletRequest request, HttpServletResponse response) 
throws IOException, ServletException 
{ 

response.setContentType("text/html"); 
PrintWriter out = response.getWriter(); 

try 
{ 
//out.println("<link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\" /><script src=\"http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.3.min.js\"></script><script src=\"jquery-social.js\"></script>"); 
String linktopro = "http://"+request.getParameter("link_topro"); 
//String linktopro = "http://hinddroid.com"; 
Document doc = Jsoup.connect(linktopro).userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6").timeout(3000).get(); 
Elements png = doc.select("img[src]"); 
Elements title = doc.select("title:first-child"); 
//Elements title = doc.title(); 
Elements metades = doc.select("meta[name=description]"); 
Pattern p1 = Pattern.compile("http://.*|.com*?.(com)"); 

out.println("<script> var myCars=new Array("); 

for(Element pngs : png) 
{ 
Matcher m1 = p1.matcher(pngs.attr("src")); 
boolean url = m1.matches(); 
String baseurl = ""; 
//out.println(url+""); 
if(url) 
{ baseurl = ""; } 
else 
{ baseurl = linktopro; } 

out.println("\""+baseurl+""+pngs.attr("src")+"\","); 
} 
out.println("\"\""); 
out.println(");</script>"); 

String outlink = "<div class=\"linkembox\">"+ 
"<div class=\"linkembox-img\">"+ 
"<img src=\"http://hinddroid.com/img/logo.gif\" width=\"150\" height=\"120\" />"+ 
"<br/><div id=\"linkimg-left\"><</div><div id=\"linkimg-right\">></div>"+ 
"</div>"+ 
"<div class=\"linkembox-text\">"+ 
"<div class=\"h\">"+title.html()+"</div><br/>"+ 
"<div class=\"h1\">"+metades.attr("content")+"</div>"+ 
"</div>"+ 
"</div>"; 
out.println(outlink); 
out.print("<script> left(myCars); </script>"); 




} 
catch(Exception ex) 
{ 
out.print(ex); 
} 
finally 
{ 
out.close(); 
} 

} 


} 
+0

Jsoup должен работать над любым хорошо сформированным документом. Это не должно не анализировать заголовки из google и youtube. Вставьте свой полный код, чтобы я мог вам помочь. – deadlock

+0

после получения страницы, 'doc.title()' должен работать нормально для получения заголовка страницы. – Shoshi

+0

Уважаемый тупик, пожалуйста, просмотрите код и shoshi, я собираюсь попробовать ваше решение –

ответ

1

исполняет селекторы, это нормально. Совершенно никаких проблем!

public static void main(String[] args) throws IOException 
{ 
    Document doc = Jsoup.connect("http://facebook.com").get(); 

    System.out.println("Title: " + doc.title()); 
    System.out.println("Meta Description: " + doc.select("meta[name=description]").first().attr("content")); 

} 

С google.com, вы можете получить только <title>, не <meta name=description..., потому что это не в источнике HTML.