2010-01-31 38 views
6

Hiện tại tôi cần một chương trình được cung cấp URL, trả về một danh sách tất cả các hình ảnh trên trang web.Nhận tất cả hình ảnh từ Chương trình WebPage | Java

ví dụ:

logo.png gallery1.jpg test.gif

Có bất kỳ phần mềm mã nguồn mở có sẵn trước khi tôi cố gắng và mã cái gì?

Ngôn ngữ nên là java. Cảm ơn Philip

+0

Bạn có cần chương trình hoặc thư viện không? –

+0

Làm thế nào bạn có nghĩa là xin lỗi? Tôi chỉ cần một tập tin .jar hoặc một cái gì đó mà tôi có thể liên kết vào một chương trình Java hiện có Im viết. Id tưởng tượng chương trình sẽ khá đơn giản, tôi chỉ cần thao tác trích xuất ảnh – Phil

+0

Tôi không nghĩ rằng bạn sẽ tìm thấy bất kỳ thư viện nào phù hợp chính xác với kịch bản của bạn. Bạn sẽ phải sử dụng một trình phân tích cú pháp và tự mình viết một số mã tải xuống. – craftsman

Trả lời

0

Bạn có thể sử dụng wget có nhiều tùy chọn khả dụng.

Hoặc google cho java wget ...

12

Chỉ cần sử dụng một simple HTML parser, như jTidy, và sau đó get all elements by tag nameimg và sau đó thu thập các src thuộc tính của mỗi người theo một List<String> hoặc có thể List<URI>.

Bạn có thể nhận được InputStream của URL bằng cách sử dụng URL#openStream() và sau đó cấp dữ liệu cho bất kỳ trình phân tích cú pháp HTML nào bạn muốn sử dụng. Dưới đây là ví dụ về khởi động:

InputStream input = new URL("http://www.stackoverflow.com").openStream(); 
Document document = new Tidy().parseDOM(input, null); 
NodeList imgs = document.getElementsByTagName("img"); 
List<String> srcs = new ArrayList<String>(); 

for (int i = 0; i < imgs.getLength(); i++) { 
    srcs.add(imgs.item(i).getAttributes().getNamedItem("src").getNodeValue()); 
} 

for (String src: srcs) { 
    System.out.println(src); 
} 

Tuy nhiên, tôi phải thừa nhận rằng HtmlUnit được Bozho đề xuất thực sự trông đẹp hơn.

+0

và htmlunit đang làm gần như những gì câu trả lời của bạn cho biết, vì vậy +1 để làm rõ chính xác những gì sẽ xảy ra. Tuy nhiên, – Bozho

+1

HtmlUnit ít bị cồng kềnh hơn jTidy. Nó cung cấp các cách * dựng sẵn * để mở một trang web và lấy các phần tử/thuộc tính quan tâm sử dụng XPath. – BalusC

0

Bạn có thể phân tích cú pháp HTML, và thu thập tất cả các thuộc tính SRC của các yếu tố IMG trong một bộ sưu tập. Sau đó tải xuống từng tài nguyên từ mỗi url và ghi nó vào một tệp. Để phân tích cú pháp, có một số trình phân tích cú pháp HTML có sẵn, Cobra là một trong số chúng.

4

Đây là chết đơn giản với HTML Parser (và bất kỳ khác phân tích cú pháp HTML đàng hoàng):

Parser parser = new Parser("http://www.yahoo.com/"); 
NodeList list = parser.parse(new TagNameFilter("IMG")); 

for (SimpleNodeIterator iterator = list.elements(); iterator.hasMoreNodes();) { 
    Tag tag = (Tag) iterator.nextNode(); 
    System.out.println(tag.getAttribute("src")); 
} 
0

Với thẻ mở Graph và đơn vị HTML, bạn có thể trích xuất dữ liệu của bạn thực sự dễ dàng (PageMeta là một POJO đơn giản giữ kết quả):

Parser parser = new Parser(url); 

    PageMeta pageMeta = new PageMeta(); 
    pageMeta.setUrl(url); 

    NodeList meta = parser.parse(new TagNameFilter("meta")); 
    for (SimpleNodeIterator iterator = meta.elements(); iterator.hasMoreNodes();) { 
     Tag tag = (Tag) iterator.nextNode(); 

     if ("og:image".equals(tag.getAttribute("property"))) { 
      pageMeta.setImageUrl(tag.getAttribute("content")); 
     } 

     if ("og:title".equals(tag.getAttribute("property"))) { 
      pageMeta.setTitle(tag.getAttribute("content")); 
     } 

     if ("og:description".equals(tag.getAttribute("property"))) { 
      pageMeta.setDescription(tag.getAttribute("content")); 
     } 
    } 
0

Bạn chỉ có thể sử dụng biểu thức chính quy trong Java

<html> 
 
<body> 
 
<p> 
 
<img src="38220.png" alt="test" title="test" /> 
 
<img src="32222.png" alt="test" title="test" /> 
 
</p> 
 
</body> 
 
</html>

String s ="html"; //above html content 
    Pattern p = Pattern.compile("<img [^>]*src=[\\\"']([^\\\"^']*)"); 
    Matcher m = p.matcher (s); 
    while (m.find()) { 
     String src = m.group(); 
     int startIndex = src.indexOf("src=") + 5; 
     String srcTag = src.substring(startIndex, src.length()); 
     System.out.println(srcTag); 
    } 
Các vấn đề liên quan