2013-04-20 4 views
5

मेरे पास एक तरीका है जो यूआरएल में लेता है और उस पृष्ठ पर सभी लिंक पाता है। हालांकि मुझे चिंता है कि यह केवल लिंक ले रहा है जब मैं जांचता हूं कि लिंक काम कर रहे हैं या नहीं, तो कुछ लिंक अजीब लगते हैं। उदाहरण के लिए यदि मैं www.google.com पर लिंक देखता हूं तो मुझे 6 टूटी हुई लिंक मिलती हैं जो कोई http स्थिति कोड नहीं लौटाती है और इसके बजाय कहती है कि टूटी हुई लिंक के लिए 'कोई प्रोटोकॉल' नहीं है। मैं कल्पना नहीं करता कि Google के मुखपृष्ठ पर कोई टूटा लिंक होगा। टूटे हुए लिंक में से एक का उदाहरण है:/प्राथमिकताएं? एचएल = एन मैं नहीं देख सकता कि यह लिंक Google मुखपृष्ठ पर कहां है। मैं उत्सुक हूं अगर मैं सिर्फ लिंक देख रहा हूं या यह संभव है कि मैं कोड निकालने वाला हूं जो एक लिंक नहीं माना जाता है?क्या मैं केवल इस जावा कोड के साथ एक यूआरएल के लिंक की जांच कर रहा हूं?

यहाँ विधि है कि लिंक के लिए URL की जांच करता है:

public static List getLinks(String uriStr) { 

    List result = new ArrayList<String>(); 
    //create a reader on the html content 
    try{ 
     System.out.println("in the getlinks try"); 
    URL url = new URI(uriStr).toURL(); 
    URLConnection conn = url.openConnection(); 
    Reader rd = new InputStreamReader(conn.getInputStream()); 

    // Parse the HTML 
    EditorKit kit = new HTMLEditorKit(); 
    HTMLDocument doc = (HTMLDocument)kit.createDefaultDocument(); 
    kit.read(rd, doc, 0); 

    // Find all the A elements in the HTML document 
    HTMLDocument.Iterator it = doc.getIterator(HTML.Tag.A); 
    while (it.isValid()) { 
     SimpleAttributeSet s = (SimpleAttributeSet)it.getAttributes(); 

     String link = (String)s.getAttribute(HTML.Attribute.HREF); 
     if (link != null) { 
       // Add the link to the result list 
       System.out.println(link); 
      //System.out.println("link print finished"); 
      result.add(link); 
     } 
     //System.out.println(link); 
     it.next(); 
    } 
    } 

उत्तर

1

लिंक है कि आप वापस हो रही है के साथ गलत कुछ भी नहीं है।

अपने कोड को देखते हुए आप href विशेषता है, जो अपने उदाहरण के मामले में तत्व से है निकालने रहे हैं:

<a class=gbmt href="/preferences?hl=en">Search settings</a> 

(आप इस लिंक को देख सकते हैं यदि आप "सेटिंग पर नीचे दाईं ओर क्लिक करें ", एक सूची कई लिंक के साथ पॉपअप चाहिए)

आप href विशेषता देख सकते हैं केवल /preferences?hl=en होता है, जो केवल यह एक रिश्तेदार लिंक बनाता है। पूरा यूआरएल उस पृष्ठ का पता होगा जो आप वर्तमान में + href पर हैं। इस मामले में:

http://www.google.com/preferences?hl=en 

आप बस अपनी विधि का तर्क पहले जोड़ें करने के लिए यदि यूआरएल रिश्तेदार है अपने कोड में और सुधार की जरूरत है।

+0

धन्यवाद, मुझे पता है कि आपका क्या मतलब है, मुझे यकीन नहीं है कि इसे कैसे कोड करें। अगर (लिंक! = uriStr + the href) लिंक के सामने यूआरएल जोड़ें। ऐसा कुछ है? – user1835504

+0

क्षमा करें, केवल जावा सीखना। – user1835504

+0

मैं कुछ ऐसा करूंगा: 'अगर (! "Http" .regionMatchches (सत्य, 0, लिंक, 0, 4)) {link = uriStr + link; } '। इस तरह आपको केस संवेदनशील लिंक, या 4 से कम वर्ण वाले href के बारे में चिंता करने की आवश्यकता नहीं है। क्षमा मांगने की कोई आवश्यकता नहीं। मदद करने के लिए खुशी :) –

संबंधित मुद्दे