Jsoup爬蟲學習--獲取網頁所有的圖片,鏈接和其他信息,並檢查url和文本信息
此例將頁面圖片和url全部輸出,重點不太明確,可根據自己的需要輸出和截取;
import org.jsoup.Jsoup; import org.jsoup.helper.Validate; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException; public class ListLinks { public static void main(String[] args) throws IOException { //將url賦值,初始化 String url = "http://news.ycombinator.com/"; print("url is %s...", url); //獲取頁面內容 Document doc = Jsoup.connect(url).get(); //將a標簽下的href元素取出 Elements links = doc.select("a[href]"); //將含src的元素取出 例如:src="s.gif" Elements media = doc.select("[src]"); //將link標簽下的href元素取出 Elements imports = doc.select("link[href]"); //輸出含src的元素的個數 print("\nMedia: (%d)", media.size()); for (Element src : media) { //將tagname為img標簽的取出,並輸出 if (src.tagName().equals("img")) //第一個為tagname,輸出的為img標簽;第二個為src等於號后面的參數值,為此處為url網址,第三個為圖片寬,第四個為圖片高,第五個為alt的參數值,此例為空 print(" * %s: <%s> %sx%s (%s)", src.tagName(), src.attr("abs:src"), src.attr("width"), src.attr("height"), trim(src.attr("alt"), 20)); else //若tagname不為img,則僅輸出三項內容 print(" * %s: <%s>", src.tagName(), src.attr("abs:src")); } //輸出含link>href元素的個數 print("\nImports: (%d)", imports.size()); //循環每個link>href元素 for (Element link : imports) { //第一個為tagname,輸出的為link標簽;第二個為href等於號后面的參數值,為此處為url網址;第三個為rel等號后面的參數值 print(" * %s <%s> (%s)", link.tagName(),link.attr("abs:href"), link.attr("rel")); } //輸出含a>href元素的個數 print("\nLinks: (%d)", links.size()); for (Element link : links) { //第一個為tagname,輸出的為a標簽;第二個為href等於號后面的參數值,為此處為url網址;第三個為link標簽含的文本值,若超過35個字符則,截取前35個字符 print(" * a: <%s> (%s)", link.attr("abs:href"), trim(link.text(), 35)); } } //重寫print private static void print(String msg, Object... args) { System.out.println(String.format(msg, args)); } //重寫trim private static String trim(String s, int width) { if (s.length() > width) return s.substring(0, width-1) + "."; else return s; } }
此處還用到了java占位符:
int year=2017;
int month=6;
int day=1;</P>
String str=String.format("今天是%d年%d月%d日,祝大家兒童節快樂!!!",
year, month, day);
代碼中的String.format方法,用來使用占位符拼接字符串數據,具有類型效果的還有用於打印的:
System.out.printf("format string", Object...args)
其中的 %d 就表示一個十進制整數位置,這個位置會由后面參數補充后組成新的字符串
以下是所有的占位符及簡要說明:
%s 字符串
%c 字符
%d 整數(十進制)
%x 整數(十六進制)
%o 整數(八進制)
%f 浮點型(十進制)
%a 浮點型(十六進制)
%e 指數類型9.38e+5
%g 通用浮點類型(f和e類型中較短的)
%n 換行\r\n
%% 百分號%
%tF 日期2017-05-09
%tT 時間08:52:59
%tA 星期一
%tZ 區時CTS
%tz 區時+0800
%tY 年份2017
%ty 年份17
%tm 月份05
%td 日期09
%tH 小時08
%tM 分鍾52
%tS 秒鍾59
%tL 毫秒999