日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java使用Crawler4j开发爬虫

發布時間:2024/1/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java使用Crawler4j开发爬虫 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

在爬蟲開發中,常用的語言是python,但是也可以使用java來進行 開發,這樣就可以利用java強大的庫,下面就來介紹一下常用的java爬蟲框架。

Crawler4j

官網:https://github.com/yasserg/crawler4j
開發順序:

  • 定制Controller層,用于控制爬蟲的行為
  • 使用main()直接開始程序即可
  • 下面上代碼:

    // 此類用于控制爬蟲爬取網頁的圖片,并且將圖片存儲在本地 public class ImageCrawler extends WebCrawler {// 用于過濾,使用正則表達式匹配private static final Pattern filters = Pattern.compile(".*(\\.(css|js|mid|mp2|mp3|mp4|wav|avi|mov|mpeg|ram|m4v|pdf" +"|rm|smil|wmv|swf|wma|zip|rar|gz))$");// 用于確定需要爬取的資源類型(這邊是爬取圖片)private static final Pattern imgPatterns = Pattern.compile(".*(\\.(bmp|gif|jpe?g|png|tiff?))$");// 存儲圖片的文件夾private static File storageFolder;// 爬蟲會爬取的域,可以是一個普通的URLprivate static String[] crawlDomains;// 初始化Controllerpublic static void configure(String[] domain, String storageFolderName) {crawlDomains = domain;storageFolder = new File(storageFolderName);if (!storageFolder.exists()) {storageFolder.mkdirs();}}@Override// 確定需不需要下載url所指定的資源public boolean shouldVisit(Page referringPage, WebURL url) {String href = url.getURL().toLowerCase();// 和過濾器相匹配,不下載 if (filters.matcher(href).matches()) {return false;}// 是圖片,下載if (imgPatterns.matcher(href).matches()) {return true;}// 如果是網頁,進行url匹配,看是不是在需要下載的域內部for (String domain : crawlDomains) {// 在需要下載的域內if (href.startsWith(domain)) {return true;}}return false;}// shouldVisit為true,則會調用此函數@Overridepublic void visit(Page page) {String url = page.getWebURL().getURL();// 如果是圖片,并且圖片大小在10kb以內,就不訪問if (!imgPatterns.matcher(url).matches() ||!((page.getParseData() instanceof BinaryParseData) ||(page.getContentData().length < (10 * 1024)))) {return;}// get a unique name for storing this image// 獲取圖片的格式String extension = url.substring(url.lastIndexOf('.'));// 獲取圖片的名稱,此處是隨機值String hashedName = UUID.randomUUID() + extension;// 存儲圖片String filename = storageFolder.getAbsolutePath() + "/" + hashedName;try {// 寫入文件系統,并且輸出到磁盤Files.write(page.getContentData(), new File(filename));logger.info("Stored: {}", url);} catch (IOException iox) {logger.error("Failed to write file: " + filename, iox);}} }

    下面是啟動爬蟲所用:

    public class ImageCrawlController {private static final Logger logger = LoggerFactory.getLogger(ImageCrawlController.class);public static void main(String[] args) throws Exception {// 爬蟲參數控制,需要傳入3個參數// 存儲路徑,這個是存儲爬蟲的運行時數據的// 并行線程數量// 圖片存儲路徑if (args.length < 3) {logger.info("Needed parameters: ");logger.info("\t rootFolder (it will contain intermediate crawl data)");logger.info("\t numberOfCralwers (number of concurrent threads)");logger.info("\t storageFolder (a folder for storing downloaded images)");return;}String rootFolder = args[0];int numberOfCrawlers = Integer.parseInt(args[1]);String storageFolder = args[2];CrawlConfig config = new CrawlConfig();// 設置運行數據存儲路徑config.setCrawlStorageFolder(rootFolder);// 下載二進制數據(圖片是二進制的數據)config.setIncludeBinaryContentInCrawling(true);// 需要爬的網站String[] crawlDomains = {"http://uci.edu/"};// PageFetcher是用于下載數據的 PageFetcher pageFetcher = new PageFetcher(config);// 用于控制是否遵守robots協議RobotstxtConfig robotstxtConfig = new RobotstxtConfig();RobotstxtServer robotstxtServer = new RobotstxtServer(robotstxtConfig, pageFetcher);CrawlController controller = new CrawlController(config, pageFetcher, robotstxtServer);// 添加爬蟲最初爬取的網頁for (String domain : crawlDomains) {controller.addSeed(domain);}ImageCrawler.configure(crawlDomains, storageFolder);// 啟動爬蟲,使用并行controller.start(ImageCrawler.class, numberOfCrawlers);} }

    #Tip:本文所用代碼是Crawler4j官方代碼,只是稍作注解而已

    轉載于:https://my.oschina.net/u/3039639/blog/798512

    總結

    以上是生活随笔為你收集整理的java使用Crawler4j开发爬虫的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。