crawler4j 學習(一)
crawler4j是一個輕量級多線程網絡爬蟲,開發者可以調用相應的接口在短時間內創建一個多線程網絡爬蟲。
前期准備
使用maven
為了使用最近版本的crawler4j,請將下面的片段添加到你的pom.xml文件中。
<dependency> <groupId>edu.uci.ics</groupId> <artifactId>crawler4j</artifactId> <version>4.1</version> </dependency>
不沒有maven項目
crawler4j JARs 可以在發行的版本頁面和Maven Central(應該是maven中心)找到。
如果你沒有maven項目卻想使用crawler4j,注意crawler4j jar文件有幾個外部的依賴。在最近的版本中,你可以發現一個命名為crawler4j-X Y -with-dependencies.jar包含了所有的依賴的捆綁。你可以下載下來並且將它添加到你的classpath下獲得所有的依賴。
過程
使用crawler4j需要創建一個繼承WebCrawler的爬蟲類。
public class MyCrawler extends WebCrawler { private final static Pattern FILTERS = Pattern.compile(".*(\\.(css|js|gif|jpg" + "|png|mp3|mp3|zip|gz))$"); /** * 這個方法有兩個參數。第一個參數是我們發現的新的URL的頁面並且第二個參數是新的URL。
* 你應該實現這個方法去指定這個被給的URL是不是應該去爬取。在這個例子中,我們指導
* 爬蟲去忽視有CSS,JS,git等的URL並且知識獲得了以“http://www.ics.uci.edu/”
* 開頭的URL。在這種情況下,我們不需要用參考頁面這個參數來做決定。 */ @Override public boolean shouldVisit(Page referringPage, WebURL url) { String href = url.getURL().toLowerCase(); return !FILTERS.matcher(href).matches() && href.startsWith("http://www.ics.uci.edu/"); } /** * 這個功能是抓取准備被你的項目處理的頁面 */ @Override public void visit(Page page) { String url = page.getWebURL().getURL(); System.out.println("URL: " + url); if (page.getParseData() instanceof HtmlParseData) { HtmlParseData htmlParseData = (HtmlParseData) page.getParseData(); String text = htmlParseData.getText(); String html = htmlParseData.getHtml(); Set<WebURL> links = htmlParseData.getOutgoingUrls(); System.out.println("Text length: " + text.length()); System.out.println("Html length: " + html.length()); System.out.println("Number of outgoing links: " + links.size()); } } }
上面的例子覆蓋了兩個主要方法:
- shouldVisit:這個方法決定了要抓取的URL及其內容,例子中只允許抓取“www.ics.uci.edu”這個域的頁面,不允許.css、.js和多媒體等文件。
- visit:當URL下載完成會調用這個方法。你可以輕松獲取下載頁面的url, 文本, 鏈接, html,和唯一id等內容。
補充:
search engines
參考頁面:http://www.cnblogs.com/s1-myblog/p/6197426.html