2013-08-16 22 views
6

Tôi cần trợ giúp giải quyết vấn đề. Tôi cần một chương trình có trang web tìm và trích xuất hình ảnh "chính", tức là hình ảnh đại diện cho trang web. (Để nói đó là lớn nhất hoặc ảnh đầu tiên đôi khi nhưng không phải lúc nào cũng đúng).Cách tìm và trích xuất hình ảnh "chính" trên trang web

Tôi nên tiếp cận điều này như thế nào? Có thư viện nào có thể giúp tôi với điều này không? Cảm ơn!

+1

[jsoup] (http://jsoup.org/) .... – MadProgrammer

Trả lời

9

OPTION 1

Bạn có thể kiểm Goose. Nó thực hiện một cái gì đó tương tự như những gì Pocket và Readability làm, tức là cố gắng trích xuất các bài viết chính từ một trang web nhất định bằng cách sử dụng một tập hợp các heuristics. Nó dường như cũng có thể trích xuất các hình ảnh chính từ bài viết đó, nhưng nó là một chút của một hit và bỏ lỡ, do đó, 60% thời gian nó hoạt động mọi lúc.

Nó từng là một dự án Java nhưng được viết lại thành Scala.

Từ readme

Goose sẽ cố gắng để trích xuất các thông tin sau:

  • văn bản chính của một bài báo
  • hình ảnh chính của bài viết
  • Bất kỳ phim Youtube/Vimeo được nhúng trong bài viết
  • Mô tả meta
  • thẻ Meta
  • Publish Date

Hãy thử nó ở đây: http://jimplush.com/blog/goose


OPTION 2

Bạn có thể sử dụng một wrapper Java (ví dụ GhostDriver) để chạy trình duyệt không đầu, như PhantomJS. Sau đó, tìm nạp trang web và tìm phần tử img có kích thước lớn nhất. This GhostDriver test case cho biết cách truy vấn DOM cho các phần tử và nhận kích thước hiển thị của nó.


OPTION 3

Sử dụng thư viện như jsoup giúp bạn phân tích cú pháp HTML. Sau đó nhận giá trị từ thuộc tính src từ tất cả các thẻ img. Yêu cầu mỗi URL bạn tìm một hình ảnh và đo kích thước của chúng. Người có kích thước lớn nhất có thể là hình ảnh chính của trang web.

+0

Cảm ơn bạn đã trả lời. Vấn đề là, nó nói, "Goose có nghĩa là để làm việc với các bài viết cá nhân, không phải trang chủ", đó là loại đối diện của những gì tôi cần. – nodwj

+0

@nodwj Tôi đã cập nhật câu trả lời của mình với hai đề xuất mới cho các cách tiếp cận có thể có. – mqchen

0

Bạn cần trí tuệ nhân tạo để làm như vậy, Computer Vision cụ thể là. Nó quá lớn để vừa với câu trả lời. This link might help

Nếu bạn là nhà toán học có kinh nghiệm về quy tắc Xác suất và Bayes, thì bạn chỉ cần lấy đơn vị có tên là Xử lý hình ảnh và Vision máy tính.

Nếu bạn đang tìm kiếm phần mềm có sẵn, bạn muốn sử dụng check this out...

This stackoverflow thread might help...

Có phần mềm này được gọi là moodstocks mà có thể giúp đỡ.

+0

Có cách nào để làm điều đó đơn giản hơn không? (ngay cả với một số chi phí chính xác?) – nodwj

+0

không giao phối, chấp nhận thực tế. Làm thế nào trên trái đất bạn có nghĩ rằng bạn có thể phát hiện hình ảnh mà không thông minh? –

+0

Hãy để tôi làm cho câu hỏi của tôi rõ ràng hơn: Tôi cần giúp tạo ra cái gọi là trí thông minh (AI), và mục tiêu của tôi là một thuật toán khá đơn giản và ngắn ngay cả khi không chính xác 100%. – nodwj

0

Bạn có thể sử dụng dịch vụ như embedly. Trong số rất nhiều thông tin khác, chúng cho phép bạn trích xuất hình ảnh chính của bất kỳ trang nào. Hoạt động tốt cho bài viết. Bạn có thể thử nó here.

2

Một giải pháp khác là trích xuất thẻ meta để chia sẻ phương tiện truyền thông xã hội trước tiên, nếu chúng có mặt, bạn may mắn nếu không bạn có thể thử các giải pháp khác.

<meta property="og:image" content="http://www.example.com/image.jpg"/> 
<meta name="twitter:image" content="http://www.example.com/image.jpg"> 
<meta itemprop="image" content="http://www.example.com/image.jpg"> 

Nếu bạn đang yousing JSOUP mã sẽ là như thế:

String imageUrlOpenGraph = document.select("meta[property=og:image]").stream() 
      .findFirst() 
      .map(doc -> doc.attr("content").trim()) 
      .orElse(null); 

    String imageUrlTwitter = document.select("meta[name=twitter:image]").stream() 
       .findFirst() 
       .map(doc -> doc.attr("content").trim()) 
       .orElse(null); 

    String imageUrlGooglePlus = document.select("meta[itemprop=image]").stream() 
       .findFirst() 
       .map(doc -> doc.attr("content").trim()) 
       .orElse(null); 
0

ImageResolver có thể làm điều đó cho bạn mà không cần sự tương tác phía máy chủ, ngoại trừ một kịch bản proxy nhỏ.

Các vấn đề liên quan