JavaFan JavaFan - 3 months ago 9
CSS Question

JSoup extract href of a tag that has rel attribute

I want to extract a href attribute of tag that has rel tag also.
This is the div portion that I work on it.

<div class="post-thumbnail">
<a rel="bookmark" title="تفضل عرض البيتزا الثانية هدية بـ 54 ر.س من بيتزا هت" href="http://www.sfqat.com/deals-11894-%d8%aa%d9%81%d8%b6%d9%84-%d8%b9%d8%b1%d8%b6-%d8%a7%d9%84%d8%a8%d9%8a%d8%aa%d8%b2%d8%a7-%d8%a7%d9%84%d8%ab%d8%a7%d9%86%d9%8a%d8%a9-%d9%87%d8%af%d9%8a%d8%a9-%d8%a8%d9%80-54-%d8%b1-%d8%b3-%d9%85%d9%86/"> <img src="http://www.sfqat.com/wp-content/themes/sfqat/scripts/timthumb.php?src=http://www.sfqat.com/wp-content/uploads/2014/11/B3OItt8CAAAepVv.jpg&amp;h=76&amp;w=76&amp;zc=1&amp;a=c" class="wp-post-image almtwer5" alt="تفضل عرض البيتزا الثانية هدية بـ 54 ر.س من بيتزا هت" title="تفضل عرض البيتزا الثانية هدية بـ 54 ر.س من بيتزا هت" width="76" height="76"><span class="overlay-icon"></span> </a>
</div>



<a rel="bookmark" title="عروض بيتزا هت غداكم نصه علينا" href="http://www.sfqat.com/deals-12153-%d8%b9%d8%b1%d9%88%d8%b6-%d8%a8%d9%8a%d8%aa%d8%b2%d8%a7-%d9%87%d8%aa-%d8%ba%d8%af%d8%a7%d9%83%d9%85-%d9%86%d8%b5%d9%87-%d8%b9%d9%84%d9%8a%d9%86%d8%a7/"> <img src="http://www.sfqat.com/wp-content/themes/sfqat/scripts/timthumb.php?src=http://www.sfqat.com/wp-content/uploads/2015/01/B6p8vUSCMAAvWyP.jpg&amp;h=76&amp;w=76&amp;zc=1&amp;a=c" class="wp-post-image almtwer5" alt="عروض بيتزا هت غداكم نصه علينا" title="عروض بيتزا هت غداكم نصه علينا" width="76" height="76"><span class="overlay-icon"></span> </a>
<a rel="bookmark" title="الدجاج المشوي خفيف ولذيذ مره لدى هرفي" href="http://www.sfqat.com/deals-11936-%d8%a7%d9%84%d8%af%d8%ac%d8%a7%d8%ac-%d8%a7%d9%84%d9%85%d8%b4%d9%88%d9%8a-%d8%ae%d9%81%d9%8a%d9%81-%d9%88%d9%84%d8%b0%d9%8a%d8%b0-%d9%85%d8%b1%d9%87-%d9%84%d8%af%d9%89-%d9%87%d8%b1%d9%81%d9%8a/"> <img src="http://www.sfqat.com/wp-content/themes/sfqat/scripts/timthumb.php?src=http://www.sfqat.com/wp-content/uploads/2014/12/LsJKv4.jpg&amp;h=76&amp;w=76&amp;zc=1&amp;a=c" class="wp-post-image almtwer5" alt="الدجاج المشوي خفيف ولذيذ مره لدى هرفي" title="الدجاج المشوي خفيف ولذيذ مره لدى هرفي" width="76" height="76"><span class="overlay-icon"></span> </a>


I tried with the following code but it didn't give me output I want :-

Elements itemimg = doc.select("article").select("div.post-thumbnail");

Elements rel = itemimg.select("a[rel~=bookmark]");

//System.out.println(itemimg);
System.out.println("It 's"+rel);

}


This is the output sample (I want the hyperref:/....... only).




<a rel="bookmark" title="الكنافة النابلسية خشنة أو ناعمة، من سعد الدين طعمها غير!" href="http://www.sfqat.com/deals-11567-%d8%a7%d9%84%d9%83%d9%86%d8%a7%d9%81%d8%a9-%d8%a7%d9%84%d9%86%d8%a7%d8%a8%d9%84%d8%b3%d9%8a%d8%a9-%d8%ae%d8%b4%d9%86%d8%a9-%d8%a3%d9%88-%d9%86%d8%a7%d8%b9%d9%85%d8%a9%d8%8c-%d9%85%d9%86-%d8%b3%d8%b9/"> <img src="http://www.sfqat.com/wp-content/themes/sfqat/scripts/timthumb.php?src=http://www.sfqat.com/wp-content/uploads/2014/08/10411824_795664147120940_2602495268443605656_n.jpg&amp;h=76&amp;w=76&amp;zc=1&amp;a=c" class="wp-post-image almtwer5" alt="الكنافة النابلسية خشنة أو ناعمة، من سعد الدين طعمها غير!" title="الكنافة النابلسية خشنة أو ناعمة، من سعد الدين طعمها غير!" width="76" height="76"><span class="overlay-icon"></span> </a>
<a rel="bookmark" title="عروض ابل بيز السعودية ابل بيز سيزلرز لذة تسمعها من بعيد" href="http://www.sfqat.com/deals-11564-%d8%b9%d8%b1%d9%88%d8%b6-%d8%a7%d8%a8%d9%84-%d8%a8%d9%8a%d8%b2-%d8%a7%d9%84%d8%b3%d8%b9%d9%88%d8%af%d9%8a%d8%a9-%d8%a7%d8%a8%d9%84-%d8%a8%d9%8a%d8%b2-%d8%b3%d9%8a%d8%b2%d9%84%d8%b1%d8%b2-%d9%84%d8%b0/"> <img src="http://www.sfqat.com/wp-content/themes/sfqat/scripts/timthumb.php?src=http://www.sfqat.com/wp-content/uploads/2014/08/10365790_826172157416452_904402968051705800_n.jpg&amp;h=76&amp;w=76&amp;zc=1&amp;a=c" class="wp-post-image almtwer5" alt="عروض ابل بيز السعودية ابل بيز سيزلرز لذة تسمعها من بعيد" title="عروض ابل بيز السعودية ابل بيز سيزلرز لذة تسمعها من بعيد" width="76" height="76"><span class="overlay-icon"></span> </a>
<a rel="bookmark" title="غداءك مع هرفي اوفر واطيب" href="http://www.sfqat.com/deals-11497-%d8%ba%d8%af%d8%a7%d8%a1%d9%83-%d9%85%d8%b9-%d9%87%d8%b1%d9%81%d9%8a-%d8%a7%d9%88%d9%81%d8%b1-%d9%88%d8%a7%d8%b7%d9%8a%d8%a8/"> <img src="http://www.sfqat.com/wp-content/themes/sfqat/scripts/timthumb.php?src=http://www.sfqat.com/wp-content/uploads/2014/08/RvZtRr.png&amp;h=76&amp;w=76&amp;zc=1&amp;a=c" class="wp-post-image almtwer5" alt="غداءك مع هرفي اوفر واطيب" title="غداءك مع هرفي اوفر واطيب" width="76" height="76"><span class="overlay-icon"></span> </a>
<a rel="bookmark" title="المدرسة تحلى مع كرواسون جبن سعد الدين" href="http://www.sfqat.com/deals-11441-%d8%a7%d9%84%d9%85%d8%af%d8%b1%d8%b3%d8%a9-%d8%aa%d8%ad%d9%84%d9%89-%d9%85%d8%b9-%d9%83%d8%b1%d9%88%d8%a7%d8%b3%d9%88%d9%86-%d8%ac%d8%a8%d9%86-%d8%b3%d8%b9%d8%af-%d8%a7%d9%84%d8%af%d9%8a%d9%86/"> <img src="http://www.sfqat.com/wp-content/themes/sfqat/scripts/timthumb.php?src=http://www.sfqat.com/wp-content/uploads/2014/08/10632834_795661680454520_4531692599466389199_n.jpg&amp;h=76&amp;w=76&amp;zc=1&amp;a=c" class="wp-post-image almtwer5" alt="المدرسة تحلى مع كرواسون جبن سعد الدين" title="المدرسة تحلى مع كرواسون جبن سعد الدين" width="76" height="76"><span class="overlay-icon"></span> </a>
<a rel="bookmark" title="جديد شاورمر توستا لحم وتوستا حلومي طعم لذيذ وعلى مزاجك من شاورمر" href="http://www.sfqat.com/deals-11437-%d8%ac%d8%af%d9%8a%d8%af-%d8%b4%d8%a7%d9%88%d8%b1%d9%85%d8%b1-%d8%aa%d9%88%d8%b3%d8%aa%d8%a7-%d9%84%d8%ad%d9%85-%d9%88%d8%aa%d9%88%d8%b3%d8%aa%d8%a7-%d8%ad%d9%84%d9%88%d9%85%d9%8a-%d8%b7%d8%b9%d9%85/"> <img src="http://www.sfqat.com/wp-content/themes/sfqat/scripts/timthumb.php?src=http://www.sfqat.com/wp-content/uploads/2014/08/10620744_832685153409996_4918377583411381740_n.jpg&amp;h=76&amp;w=76&amp;zc=1&amp;a=c" class="wp-post-image almtwer5" alt="جديد شاورمر توستا لحم وتوستا حلومي طعم لذيذ وعلى مزاجك من شاورمر" title="جديد شاورمر توستا لحم وتوستا حلومي طعم لذيذ وعلى مزاجك من شاورمر" width="76" height="76"><span class="overlay-icon"></span> </a>


If I use the following code , I will get the first hyperlink only and I want all hyperlinks.

http://www.sfqat.com/deals-12153-%d8%b9%d8%b1%d9%88%d8%b6-%d8%a8%d9%8a%d8%aa%d8%b2%d8%a7-%d9%87%d8%aa-%d8%ba%d8%af%d8%a7%d9%83%d9%85-%d9%86%d8%b5%d9%87-%d8%b9%d9%84%d9%8a%d9%86%d8%a7/

Document doc = Jsoup.connect("http://www.sfqat.com/deals-9580-%d8%a7%d9%84%d8%b7%d8%b9%d9%85-%d8%a7%d9%84%d9%84%d8%a8%d9%86%d8%a7%d9%86%d9%8a-%d8%a7%d9%84%d8%a3%d8%b5%d9%8a%d9%84-%d9%8a%d8%b5%d9%84-%d8%a5%d9%84%d9%8a%d9%83-%d8%a3%d9%8a%d9%86%d9%85%d8%a7-%d9%83/").get();

Elements art =doc.select("article").select("div.lop").select("span.lop1 a[href]");
Elements itemimg = doc.select("article").select("div.post-thumbnail");

Elements rel = itemimg.select("a[rel~=bookmark]");
System.out.println("It 's"+rel.attr("href"));

Answer

Try this instead:

Document doc = Jsoup.connect("http://www.sfqat.com/deals-9580-%d8%a7%d9%84%d8%b7%d8%b9%d9%85-%d8%a7%d9%84%d9%84%d8%a8%d9%86%d8%a7%d9%86%d9%8a-%d8%a7%d9%84%d8%a3%d8%b5%d9%8a%d9%84-%d9%8a%d8%b5%d9%84-%d8%a5%d9%84%d9%8a%d9%83-%d8%a3%d9%8a%d9%86%d9%85%d8%a7-%d9%83/").get();   

// Extract links
Elements links = doc.select("article div.post-thumbnail a[rel=bookmark]");
for(Element link : links) {
   System.out.println(link.attr("abs:href"));
}

// Extract images
Elements imgs = doc.select("article div.post-thumbnail a[rel=bookmark] img"); 
for(Element img : imgs) {
   System.out.println(img.attr("abs:src"));
}    


//Extracting Hrefs and images adjacently.
Elements links = doc.select("article div.post-thumbnail  a[rel=bookmark]");
Elements links2 = doc.select("article div.post-thumbnail img");
for(Element link : links) {
   for(Element link3 :links2) {
      System.out.println(link+"\t"+link3.attr("abs:src")+"\t"+link.attr("abs:href"));
   }
}

Instead of calling multiple times the select method, the method is called one time only with a single selector expression: article div.post-thumbnail a[rel=bookmark].

You can test your selector expressions here: http://try.jsoup.org.
You can even fetch directly any url.

For details, the documentation for selector expression is here: http://jsoup.org/apidocs/org/jsoup/select/Selector.html