├── .gitattributes ├── BookCrawler-v1.0 ├── README.md └── bookcrawler │ ├── crawler.sql │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── pers │ │ └── huangyuhui │ │ └── bookcrawler │ │ ├── BookCrawlerTest.java │ │ ├── dao │ │ └── BookDao.java │ │ ├── pojo │ │ ├── Book.java │ │ └── HttpHeader.java │ │ ├── task │ │ └── BookCrawler.java │ │ └── util │ │ ├── ConfigManager.java │ │ ├── DBUtils.java │ │ └── HttpUtils.java │ └── resources │ └── db.properties ├── BookCrawler-v2.0 ├── README.md └── bookcrawler-v2.0 │ ├── crawler.sql │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── pers │ │ └── huangyuhui │ │ └── bookcrawler │ │ ├── BookCrawlerTest.java │ │ ├── dao │ │ └── BookDao.java │ │ ├── mapper │ │ └── BookMapper.xml │ │ ├── pojo │ │ └── Book.java │ │ ├── task │ │ └── BookProcessor.java │ │ └── util │ │ ├── HttpUtils.java │ │ └── MyBatisUtils.java │ └── resources │ ├── db.properties │ ├── log4j.properties │ └── mybatis-config.xml ├── BookCrawler-v3.0 ├── README.md ├── bookcrawler-v3.0 │ ├── .gitignore │ ├── crawler.sql │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── pers │ │ │ └── huangyuhui │ │ │ └── bookcrawler │ │ │ ├── BookcrawlerApplication.java │ │ │ ├── controller │ │ │ └── BookController.java │ │ │ ├── crawler │ │ │ ├── BookCrawlerTest.java │ │ │ ├── dao │ │ │ │ └── BookDao.java │ │ │ ├── mapper │ │ │ │ └── BookMapper.xml │ │ │ ├── pojo │ │ │ │ └── Book.java │ │ │ ├── resources │ │ │ │ ├── db.properties │ │ │ │ ├── log4j.properties │ │ │ │ └── mybatis-config.xml │ │ │ ├── task │ │ │ │ └── BookProcessor.java │ │ │ └── util │ │ │ │ ├── FileUtils.java │ │ │ │ ├── HttpUtils.java │ │ │ │ └── MyBatisUtils.java │ │ │ ├── dao │ │ │ ├── BookMapper.java │ │ │ └── BookMapper.xml │ │ │ ├── pojo │ │ │ └── Book.java │ │ │ └── service │ │ │ ├── BookService.java │ │ │ └── impl │ │ │ └── BookServiceImpl.java │ │ └── resources │ │ ├── application.properties │ │ ├── static │ │ ├── easyui │ │ │ ├── css │ │ │ │ ├── default.css │ │ │ │ └── demo.css │ │ │ ├── jquery.easyui.min.js │ │ │ ├── jquery.min.js │ │ │ ├── js │ │ │ │ ├── outlook2.js │ │ │ │ └── validateExtends.js │ │ │ └── themes │ │ │ │ ├── color.css │ │ │ │ ├── default │ │ │ │ ├── accordion.css │ │ │ │ ├── calendar.css │ │ │ │ ├── combo.css │ │ │ │ ├── combobox.css │ │ │ │ ├── datagrid.css │ │ │ │ ├── datalist.css │ │ │ │ ├── datebox.css │ │ │ │ ├── dialog.css │ │ │ │ ├── easyui.css │ │ │ │ ├── filebox.css │ │ │ │ ├── images │ │ │ │ │ ├── accordion_arrows.png │ │ │ │ │ ├── blank.gif │ │ │ │ │ ├── calendar_arrows.png │ │ │ │ │ ├── combo_arrow.png │ │ │ │ │ ├── datagrid_icons.png │ │ │ │ │ ├── datebox_arrow.png │ │ │ │ │ ├── layout_arrows.png │ │ │ │ │ ├── linkbutton_bg.png │ │ │ │ │ ├── loading.gif │ │ │ │ │ ├── menu_arrows.png │ │ │ │ │ ├── messager_icons.png │ │ │ │ │ ├── pagination_icons.png │ │ │ │ │ ├── panel_tools.png │ │ │ │ │ ├── searchbox_button.png │ │ │ │ │ ├── slider_handle.png │ │ │ │ │ ├── spinner_arrows.png │ │ │ │ │ ├── tabs_icons.png │ │ │ │ │ ├── tree_icons.png │ │ │ │ │ └── validatebox_warning.png │ │ │ │ ├── layout.css │ │ │ │ ├── linkbutton.css │ │ │ │ ├── menu.css │ │ │ │ ├── menubutton.css │ │ │ │ ├── messager.css │ │ │ │ ├── numberbox.css │ │ │ │ ├── pagination.css │ │ │ │ ├── panel.css │ │ │ │ ├── progressbar.css │ │ │ │ ├── propertygrid.css │ │ │ │ ├── searchbox.css │ │ │ │ ├── slider.css │ │ │ │ ├── spinner.css │ │ │ │ ├── splitbutton.css │ │ │ │ ├── tabs.css │ │ │ │ ├── textbox.css │ │ │ │ ├── tooltip.css │ │ │ │ ├── tree.css │ │ │ │ ├── validatebox.css │ │ │ │ └── window.css │ │ │ │ ├── icon.css │ │ │ │ ├── icons │ │ │ │ ├── add.png │ │ │ │ ├── asterisk_orange.png │ │ │ │ ├── back.png │ │ │ │ ├── basket_remove.png │ │ │ │ ├── blank.gif │ │ │ │ ├── book_add.png │ │ │ │ ├── book_open_mark.png │ │ │ │ ├── book_previous.png │ │ │ │ ├── cancel.png │ │ │ │ ├── chart_bar.png │ │ │ │ ├── class.png │ │ │ │ ├── clear.png │ │ │ │ ├── cut.png │ │ │ │ ├── door_out.png │ │ │ │ ├── edit_add.png │ │ │ │ ├── edit_remove.png │ │ │ │ ├── error.png │ │ │ │ ├── filesave.png │ │ │ │ ├── filter.png │ │ │ │ ├── find.png │ │ │ │ ├── folder_up.png │ │ │ │ ├── heart.png │ │ │ │ ├── help.png │ │ │ │ ├── house.png │ │ │ │ ├── info.png │ │ │ │ ├── large_chart.png │ │ │ │ ├── large_clipart.png │ │ │ │ ├── large_picture.png │ │ │ │ ├── large_shapes.png │ │ │ │ ├── large_smartart.png │ │ │ │ ├── lock.png │ │ │ │ ├── man.png │ │ │ │ ├── mini_add.png │ │ │ │ ├── mini_edit.png │ │ │ │ ├── mini_refresh.png │ │ │ │ ├── more.png │ │ │ │ ├── no.png │ │ │ │ ├── note.png │ │ │ │ ├── note_pen.png │ │ │ │ ├── ok.png │ │ │ │ ├── password_lock.png │ │ │ │ ├── pencil.png │ │ │ │ ├── pencil_add.png │ │ │ │ ├── print.png │ │ │ │ ├── redo.png │ │ │ │ ├── reload.png │ │ │ │ ├── search.png │ │ │ │ ├── set.png │ │ │ │ ├── sum.png │ │ │ │ ├── teacher.png │ │ │ │ ├── text_list_bullets.png │ │ │ │ ├── text_list_numbers.png │ │ │ │ ├── tip.png │ │ │ │ ├── undo.png │ │ │ │ ├── user_add.png │ │ │ │ ├── user_gray.png │ │ │ │ ├── user_red.png │ │ │ │ ├── vcard_edit.png │ │ │ │ ├── world.png │ │ │ │ ├── world_add.png │ │ │ │ ├── world_night.png │ │ │ │ └── zoom_in.png │ │ │ │ ├── locale │ │ │ │ └── easyui-lang-zh_CN.js │ │ │ │ └── metro │ │ │ │ ├── accordion.css │ │ │ │ ├── calendar.css │ │ │ │ ├── combo.css │ │ │ │ ├── combobox.css │ │ │ │ ├── datagrid.css │ │ │ │ ├── datalist.css │ │ │ │ ├── datebox.css │ │ │ │ ├── dialog.css │ │ │ │ ├── easyui.css │ │ │ │ ├── filebox.css │ │ │ │ ├── images │ │ │ │ ├── accordion_arrows.png │ │ │ │ ├── blank.gif │ │ │ │ ├── calendar_arrows.png │ │ │ │ ├── combo_arrow.png │ │ │ │ ├── datagrid_icons.png │ │ │ │ ├── datebox_arrow.png │ │ │ │ ├── layout_arrows.png │ │ │ │ ├── linkbutton_bg.png │ │ │ │ ├── loading.gif │ │ │ │ ├── menu_arrows.png │ │ │ │ ├── messager_icons.png │ │ │ │ ├── pagination_icons.png │ │ │ │ ├── panel_tools.png │ │ │ │ ├── searchbox_button.png │ │ │ │ ├── slider_handle.png │ │ │ │ ├── spinner_arrows.png │ │ │ │ ├── tabs_icons.png │ │ │ │ ├── tree_icons.png │ │ │ │ └── validatebox_warning.png │ │ │ │ ├── layout.css │ │ │ │ ├── linkbutton.css │ │ │ │ ├── menu.css │ │ │ │ ├── menubutton.css │ │ │ │ ├── messager.css │ │ │ │ ├── numberbox.css │ │ │ │ ├── pagination.css │ │ │ │ ├── panel.css │ │ │ │ ├── progressbar.css │ │ │ │ ├── propertygrid.css │ │ │ │ ├── searchbox.css │ │ │ │ ├── slider.css │ │ │ │ ├── spinner.css │ │ │ │ ├── splitbutton.css │ │ │ │ ├── switchbutton.css │ │ │ │ ├── tabs.css │ │ │ │ ├── textbox.css │ │ │ │ ├── tooltip.css │ │ │ │ ├── tree.css │ │ │ │ ├── validatebox.css │ │ │ │ └── window.css │ │ └── exist.txt │ │ └── templates │ │ ├── bookList.html │ │ ├── intro.html │ │ └── main.html └── demonstration-images │ ├── BookCrawler-V3.0-Intro.PNG │ └── BookCrawler-V3.0-bookList.PNG ├── LICENSE ├── README.md └── bookcrawler-icon.png /.gitattributes: -------------------------------------------------------------------------------- 1 | *.js linguist-language=java 2 | *.css linguist-language=java 3 | *.html linguist-language=java 4 | -------------------------------------------------------------------------------- /BookCrawler-v1.0/README.md: -------------------------------------------------------------------------------- 1 | > JDBookCrawler 1.0 : 详细介绍及使用指南见 : [`博客文章`](https://yubuntu0109.github.io/2019/07/14/%E5%B0%8F%E7%88%AC%E8%99%AB-JDBookCrawler-V1-0/) 2 | -------------------------------------------------------------------------------- /BookCrawler-v1.0/bookcrawler/crawler.sql: -------------------------------------------------------------------------------- 1 | CREATE DATABASE IF NOT EXISTS `crawler` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */; 2 | USE `crawler`; 3 | -- MySQL dump 10.13 Distrib 8.0.11, for Win64 (x86_64) 4 | -- 5 | -- Host: localhost Database: crawler 6 | -- ------------------------------------------------------ 7 | -- Server version 8.0.11 8 | 9 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; 10 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; 11 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; 12 | SET NAMES utf8 ; 13 | /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; 14 | /*!40103 SET TIME_ZONE='+00:00' */; 15 | /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; 16 | /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; 17 | /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; 18 | /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; 19 | 20 | -- 21 | -- Table structure for table `tb_book` 22 | -- 23 | 24 | DROP TABLE IF EXISTS `tb_book`; 25 | /*!40101 SET @saved_cs_client = @@character_set_client */; 26 | SET character_set_client = utf8mb4 ; 27 | CREATE TABLE `tb_book` ( 28 | `id` int(11) NOT NULL AUTO_INCREMENT, 29 | `sku` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 30 | `name` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 31 | `price` double DEFAULT NULL, 32 | `author` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 33 | `publishing` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 34 | `pubDate` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 35 | `imageName` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 36 | `bookUrl` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 37 | `imageUrl` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 38 | PRIMARY KEY (`id`) 39 | ) ENGINE=InnoDB AUTO_INCREMENT=626 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='京东书籍商品表'; 40 | /*!40101 SET character_set_client = @saved_cs_client */; 41 | /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; 42 | 43 | /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; 44 | /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; 45 | /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; 46 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; 47 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; 48 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; 49 | /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; 50 | 51 | -- Dump completed on 2019-07-14 13:57:06 52 | -------------------------------------------------------------------------------- /BookCrawler-v1.0/bookcrawler/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 4.0.0 6 | 7 | pers.huangyuhui 8 | bookcrawler 9 | 1.0-SNAPSHOT 10 | 11 | bookcrawler 12 | https://github.com/YUbuntu0109/Crawler-learning 13 | my first crawler 14 | 15 | 16 | UTF-8 17 | 11 18 | 11 19 | 20 | 21 | 22 | 23 | 24 | org.apache.httpcomponents 25 | httpclient 26 | 4.5.9 27 | 28 | 29 | 30 | org.jsoup 31 | jsoup 32 | 1.12.1 33 | 34 | 35 | 36 | mysql 37 | mysql-connector-java 38 | 8.0.16 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | maven-clean-plugin 47 | 3.1.0 48 | 49 | 50 | maven-resources-plugin 51 | 3.0.2 52 | 53 | 54 | maven-compiler-plugin 55 | 3.8.0 56 | 57 | 58 | maven-surefire-plugin 59 | 2.22.1 60 | 61 | 62 | maven-jar-plugin 63 | 3.0.2 64 | 65 | 66 | maven-install-plugin 67 | 2.5.2 68 | 69 | 70 | maven-deploy-plugin 71 | 2.8.2 72 | 73 | 74 | maven-site-plugin 75 | 3.7.1 76 | 77 | 81 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /BookCrawler-v1.0/bookcrawler/src/main/java/pers/huangyuhui/bookcrawler/BookCrawlerTest.java: -------------------------------------------------------------------------------- 1 | package pers.huangyuhui.bookcrawler; 2 | 3 | import pers.huangyuhui.bookcrawler.pojo.HttpHeader; 4 | import pers.huangyuhui.bookcrawler.task.BookCrawler; 5 | 6 | /** 7 | * @project: BookCrawler 8 | * @description: 京东商城书籍爬虫v1.0-测试程序 9 | * @author: 黄宇辉 10 | * @date: 7/13/2019-5:57 PM 11 | * @version: 1.0 12 | * @website: https://yubuntu0109.github.io/ 13 | */ 14 | public class BookCrawlerTest { 15 | //自定义搜索关键字 16 | private static String KEY_WORD = "Java"; 17 | //自定义页码数,每页可爬取三十条书籍数据 18 | private static int currentPageNum = 1; 19 | private static int endPageNum = 10; 20 | //自定义存储书籍图片的目录路径 21 | private static final String IMAGE_PATH = "D:\\BookCrawler\\download\\bookImage\\"; 22 | //初始化书籍页面链接 23 | private static final String URL = "https://search.jd.com/Search?keyword=" + KEY_WORD + "&enc=utf-8&page="; 24 | //自定义请求头信息 25 | private static HttpHeader httpHeader = new HttpHeader(); 26 | 27 | //Test 28 | public static void main(String[] args) { 29 | httpHeader.setUserAgent("x-x-x-x-x-x");//需指定用户代理 30 | new BookCrawler().parse(URL, IMAGE_PATH, httpHeader, currentPageNum, endPageNum); 31 | } 32 | } -------------------------------------------------------------------------------- /BookCrawler-v1.0/bookcrawler/src/main/java/pers/huangyuhui/bookcrawler/dao/BookDao.java: -------------------------------------------------------------------------------- 1 | package pers.huangyuhui.bookcrawler.dao; 2 | 3 | import pers.huangyuhui.bookcrawler.pojo.Book; 4 | import pers.huangyuhui.bookcrawler.util.DBUtils; 5 | 6 | import java.sql.Connection; 7 | import java.sql.PreparedStatement; 8 | import java.sql.SQLException; 9 | 10 | /** 11 | * @project: BookCrawler 12 | * @description: 操控书籍数据 13 | * @author: 黄宇辉 14 | * @date: 7/9/2019-5:36 PM 15 | * @version: 1.0 16 | * @website: https://yubuntu0109.github.io/ 17 | */ 18 | public class BookDao { 19 | private static Connection connection = DBUtils.getConnection(); 20 | 21 | /** 22 | * @description: 将书籍数据存储到数据库 23 | * @param: book 24 | * @date: 2019-07-13 7:09 PM 25 | * @return: boolean 26 | */ 27 | public boolean insert(Book book) { 28 | PreparedStatement preparedStatement; 29 | String sql = "insert into tb_book(sku,name, price,author,publishing,pubDate,imageName,bookUrl,imageUrl) value (?,?,?,?,?,?,?,?,?)"; 30 | try { 31 | if (book != null) { 32 | preparedStatement = connection.prepareStatement(sql); 33 | preparedStatement.setString(1, book.getSku()); 34 | preparedStatement.setString(2, book.getName()); 35 | preparedStatement.setDouble(3, book.getPrice()); 36 | preparedStatement.setString(4, book.getAuthor()); 37 | preparedStatement.setString(5, book.getPublishing()); 38 | preparedStatement.setString(6, book.getPubDate()); 39 | preparedStatement.setString(7, book.getImageName()); 40 | preparedStatement.setString(8, book.getBookUrl()); 41 | preparedStatement.setString(9, book.getImageUrl()); 42 | return preparedStatement.executeUpdate() > 0; 43 | } 44 | } catch (SQLException e) { 45 | e.printStackTrace(); 46 | } 47 | return false; 48 | } 49 | } -------------------------------------------------------------------------------- /BookCrawler-v1.0/bookcrawler/src/main/java/pers/huangyuhui/bookcrawler/pojo/Book.java: -------------------------------------------------------------------------------- 1 | package pers.huangyuhui.bookcrawler.pojo; 2 | 3 | /** 4 | * @project: BookCrawler 5 | * @description: 图书信息 6 | * @author: 黄宇辉 7 | * @date: 7/9/2019-4:51 PM 8 | * @version: 1.0 9 | * @website: https://yubuntu0109.github.io/ 10 | */ 11 | public class Book { 12 | 13 | private Integer id; 14 | private String sku;//根据sku可以查询书籍 15 | private String name; 16 | private double price; 17 | private String author; 18 | private String publishing;//出版社 19 | private String pubDate;//出版时间 20 | private String imageName; //图片名称 21 | private String bookUrl; //图书链接 22 | private String imageUrl; //图片链接 23 | 24 | public Integer getId() { 25 | return id; 26 | } 27 | 28 | public void setId(Integer id) { 29 | this.id = id; 30 | } 31 | 32 | public String getSku() { 33 | return sku; 34 | } 35 | 36 | public void setSku(String sku) { 37 | this.sku = sku; 38 | } 39 | 40 | public String getName() { 41 | return name; 42 | } 43 | 44 | public void setName(String name) { 45 | this.name = name; 46 | } 47 | 48 | public double getPrice() { 49 | return price; 50 | } 51 | 52 | public void setPrice(double price) { 53 | this.price = price; 54 | } 55 | 56 | public String getAuthor() { 57 | return author; 58 | } 59 | 60 | public void setAuthor(String author) { 61 | this.author = author; 62 | } 63 | 64 | public String getPublishing() { 65 | return publishing; 66 | } 67 | 68 | public void setPublishing(String publishing) { 69 | this.publishing = publishing; 70 | } 71 | 72 | public String getPubDate() { 73 | return pubDate; 74 | } 75 | 76 | public void setPubDate(String pubDate) { 77 | this.pubDate = pubDate; 78 | } 79 | 80 | public String getImageName() { 81 | return imageName; 82 | } 83 | 84 | public void setImageName(String imageName) { 85 | this.imageName = imageName; 86 | } 87 | 88 | public String getBookUrl() { 89 | return bookUrl; 90 | } 91 | 92 | public void setBookUrl(String bookUrl) { 93 | this.bookUrl = bookUrl; 94 | } 95 | 96 | public String getImageUrl() { 97 | return imageUrl; 98 | } 99 | 100 | public void setImageUrl(String imageUrl) { 101 | this.imageUrl = imageUrl; 102 | } 103 | 104 | @Override 105 | public String toString() { 106 | return "Book{" + 107 | "sku='" + sku + '\'' + 108 | ", name='" + name + '\'' + 109 | ", price=" + price + 110 | ", author='" + author + '\'' + 111 | ", publishing='" + publishing + '\'' + 112 | ", pubDate='" + pubDate + '\'' + 113 | ", imageName='" + imageName + '\'' + 114 | ", bookUrl='" + bookUrl + '\'' + 115 | ", imageUrl='" + imageUrl + '\'' + 116 | '}'; 117 | } 118 | } -------------------------------------------------------------------------------- /BookCrawler-v1.0/bookcrawler/src/main/java/pers/huangyuhui/bookcrawler/pojo/HttpHeader.java: -------------------------------------------------------------------------------- 1 | package pers.huangyuhui.bookcrawler.pojo; 2 | 3 | /** 4 | * @project: BookCrawler 5 | * @description: HTTP请求头信息 6 | * @author: 黄宇辉 7 | * @date: 7/14/2019-10:30 AM 8 | * @version: 1.0 9 | * @website: https://yubuntu0109.github.io/ 10 | */ 11 | public class HttpHeader { 12 | private String userAgent; 13 | //······ 14 | 15 | public String getUserAgent() { 16 | return userAgent; 17 | } 18 | 19 | public void setUserAgent(String userAgent) { 20 | this.userAgent = userAgent; 21 | } 22 | } -------------------------------------------------------------------------------- /BookCrawler-v1.0/bookcrawler/src/main/java/pers/huangyuhui/bookcrawler/util/ConfigManager.java: -------------------------------------------------------------------------------- 1 | package pers.huangyuhui.bookcrawler.util; 2 | 3 | import java.io.IOException; 4 | import java.io.InputStream; 5 | import java.util.Properties; 6 | 7 | /** 8 | * @project: BookCrawler 9 | * @description: 读取配置文件的工具类 10 | * @author: 黄宇辉 11 | * @date: 7/13/2019-9:25 PM 12 | * @version: 1.0 13 | * @website: https://yubuntu0109.github.io/ 14 | */ 15 | public class ConfigManager { 16 | 17 | private static ConfigManager configManager; 18 | private static Properties properties; 19 | 20 | //加载配置文件 21 | private ConfigManager() { 22 | String configFile = "db.properties"; 23 | properties = new Properties(); 24 | try (InputStream is = ConfigManager.class.getClassLoader().getResourceAsStream(configFile)) { 25 | if (is != null) { 26 | properties.load(is); 27 | } 28 | } catch (IOException e) { 29 | e.printStackTrace(); 30 | } 31 | } 32 | 33 | /** 34 | * @description: 获取配置文件工具类的实例 35 | * @date: 2019-07-14 10:57 AM 36 | * @return: pers.huangyuhui.bookcrawler.util.ConfigManager 37 | */ 38 | public static ConfigManager getInstance() { 39 | if (configManager == null) { 40 | configManager = new ConfigManager(); 41 | } 42 | return configManager; 43 | } 44 | 45 | /** 46 | * @description: 根据配置文件中的key获取其value值 47 | * @param: key 48 | * @date: 2019-07-14 10:57 AM 49 | * @return: java.lang.String 50 | */ 51 | public String getString(String key) { 52 | return properties.getProperty(key); 53 | } 54 | 55 | } -------------------------------------------------------------------------------- /BookCrawler-v1.0/bookcrawler/src/main/java/pers/huangyuhui/bookcrawler/util/DBUtils.java: -------------------------------------------------------------------------------- 1 | package pers.huangyuhui.bookcrawler.util; 2 | 3 | import java.sql.Connection; 4 | import java.sql.DriverManager; 5 | import java.sql.SQLException; 6 | 7 | /** 8 | * @project: BookCrawler 9 | * @description: 数据库工具类 10 | * @author: 黄宇辉 11 | * @date: 7/9/2019-5:38 PM 12 | * @version: 1.0 13 | * @website: https://yubuntu0109.github.io/ 14 | */ 15 | public class DBUtils { 16 | private static Connection connection; 17 | private static ConfigManager config; 18 | 19 | //加载数据库驱动 20 | static { 21 | try { 22 | config = ConfigManager.getInstance(); 23 | Class.forName(config.getString("jdbc.driver.class")); 24 | } catch (Exception e) { 25 | throw new ExceptionInInitializerError(e); 26 | } 27 | } 28 | 29 | /** 30 | * @description: 获取数据库连接对象 31 | * @date: 2019-07-13 6:17 PM 32 | * @return: java.sql.Connection 33 | */ 34 | public static Connection getConnection() { 35 | try { 36 | if (connection == null) { 37 | connection = DriverManager.getConnection( 38 | config.getString("jdbc.connection.url"), 39 | config.getString("jdbc.connection.username"), 40 | config.getString("jdbc.connection.password")); 41 | } 42 | } catch (SQLException e) { 43 | e.printStackTrace(); 44 | } 45 | return connection; 46 | } 47 | 48 | } -------------------------------------------------------------------------------- /BookCrawler-v1.0/bookcrawler/src/main/java/pers/huangyuhui/bookcrawler/util/HttpUtils.java: -------------------------------------------------------------------------------- 1 | package pers.huangyuhui.bookcrawler.util; 2 | 3 | import org.apache.http.client.config.RequestConfig; 4 | import org.apache.http.client.methods.CloseableHttpResponse; 5 | import org.apache.http.client.methods.HttpGet; 6 | import org.apache.http.impl.client.CloseableHttpClient; 7 | import org.apache.http.impl.client.HttpClients; 8 | import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; 9 | import org.apache.http.util.EntityUtils; 10 | import pers.huangyuhui.bookcrawler.pojo.HttpHeader; 11 | 12 | import java.io.File; 13 | import java.io.FileOutputStream; 14 | import java.io.IOException; 15 | import java.util.UUID; 16 | 17 | /** 18 | * @project: BookCrawler 19 | * @description: 爬虫工具类 20 | * @author: 黄宇辉 21 | * @date: 7/9/2019-6:56 PM 22 | * @version: 1.0 23 | * @website: https://yubuntu0109.github.io/ 24 | */ 25 | public class HttpUtils { 26 | private static String imageName = null; 27 | private static String htmlContent = null; 28 | private static PoolingHttpClientConnectionManager phccm;//连接池管理器 29 | 30 | public HttpUtils() { 31 | phccm = new PoolingHttpClientConnectionManager(); 32 | phccm.setMaxTotal(100);//最大连接数 33 | phccm.setDefaultMaxPerRoute(10);//每个主机的最大连接数 34 | } 35 | 36 | /** 37 | * @description: 获取页面的静态HTML 38 | * @param: url 39 | * @param: httpHeader 40 | * @date: 2019-07-14 11:37 AM 41 | * @return: java.lang.String 42 | */ 43 | public static String doGetHtml(String url, HttpHeader httpHeader) { 44 | //创建HttpClient对象 45 | CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(phccm).build(); 46 | //创建HttpGet请求对象,设置url地址 47 | HttpGet httpGet = new HttpGet(url); 48 | //设置请求信息 49 | httpGet.setConfig(getConfig()); 50 | httpGet.setHeader("User-Agent", httpHeader.getUserAgent()); 51 | //发起请求,获取响应 52 | try (CloseableHttpResponse response = httpClient.execute(httpGet)) { 53 | //解析响应,获取数据 54 | if (response.getStatusLine().getStatusCode() == 200) { 55 | //获取响应体是否为空 56 | if (response.getEntity() != null) { 57 | htmlContent = EntityUtils.toString(response.getEntity(), "utf-8");//获取静态页面 58 | } 59 | } 60 | } catch (IOException e) { 61 | e.printStackTrace(); 62 | } 63 | return htmlContent; 64 | } 65 | 66 | /** 67 | * @description: 下载图书图片并返回重命名后的图片名 68 | * @param: url 69 | * @param: imagePath 70 | * @param: httpHeader 71 | * @date: 2019-07-14 11:37 AM 72 | * @return: java.lang.String 73 | */ 74 | public static String doGetImage(String url, String imagePath, HttpHeader httpHeader) { 75 | CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(phccm).build(); 76 | HttpGet httpGet = new HttpGet(url); 77 | httpGet.setConfig(getConfig()); 78 | httpGet.setHeader("User-Agent", httpHeader.getUserAgent()); 79 | try (CloseableHttpResponse response = httpClient.execute(httpGet)) { 80 | if (response.getStatusLine().getStatusCode() == 200) { 81 | if (response.getEntity() != null) { 82 | String suffix = url.substring(url.lastIndexOf("."));//获取图片后缀 83 | imageName = UUID.randomUUID().toString() + suffix;//重命名图片名 84 | //若存储图片的目录不存在,则创建该目录 85 | File file = new File(imagePath); 86 | if (!file.exists()) { 87 | file.mkdirs(); 88 | } 89 | //将图片下载到指定文件夹 90 | response.getEntity().writeTo(new FileOutputStream(imagePath + imageName)); 91 | } 92 | } 93 | } catch (IOException e) { 94 | e.printStackTrace(); 95 | } 96 | return imageName; 97 | } 98 | 99 | /** 100 | * @description: 设置请求配置信息 101 | * @date: 2019-07-09 7:29 PM 102 | * @return: org.apache.http.client.config.RequestConfig 103 | */ 104 | private static RequestConfig getConfig() { 105 | return RequestConfig.custom() 106 | .setConnectTimeout(10000) //创建连接的最长时间 107 | .setConnectionRequestTimeout(20000) //获取连接的最长时间 108 | .setSocketTimeout(20000) //数据传输的最长时间 109 | .build(); 110 | } 111 | } -------------------------------------------------------------------------------- /BookCrawler-v1.0/bookcrawler/src/main/resources/db.properties: -------------------------------------------------------------------------------- 1 | jdbc.driver.class=com.mysql.cj.jdbc.Driver 2 | jdbc.connection.url=jdbc:mysql://localhost/crawler?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true 3 | jdbc.connection.username=xxxxxx 4 | jdbc.connection.password=xxxxxx -------------------------------------------------------------------------------- /BookCrawler-v2.0/README.md: -------------------------------------------------------------------------------- 1 | > JDBookCrawler 2.0 : 详细介绍及使用指南见 : [`博客文章`](https://yubuntu0109.github.io/2019/07/15/%E5%B0%8F%E7%88%AC%E8%99%AB-JDBookCrawler-V2-0/) 2 | -------------------------------------------------------------------------------- /BookCrawler-v2.0/bookcrawler-v2.0/crawler.sql: -------------------------------------------------------------------------------- 1 | CREATE DATABASE IF NOT EXISTS `crawler` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */; 2 | USE `crawler`; 3 | -- MySQL dump 10.13 Distrib 8.0.11, for Win64 (x86_64) 4 | -- 5 | -- Host: localhost Database: crawler 6 | -- ------------------------------------------------------ 7 | -- Server version 8.0.11 8 | 9 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; 10 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; 11 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; 12 | SET NAMES utf8 ; 13 | /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; 14 | /*!40103 SET TIME_ZONE='+00:00' */; 15 | /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; 16 | /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; 17 | /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; 18 | /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; 19 | 20 | -- 21 | -- Table structure for table `jd_book` 22 | -- 23 | 24 | DROP TABLE IF EXISTS `jd_book`; 25 | /*!40101 SET @saved_cs_client = @@character_set_client */; 26 | SET character_set_client = utf8mb4 ; 27 | CREATE TABLE `jd_book` ( 28 | `id` int(11) NOT NULL AUTO_INCREMENT, 29 | `shCode` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 30 | `name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 31 | `author` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 32 | `publishing` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 33 | `pubDate` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 34 | `imageName` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 35 | `bookUrl` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 36 | `imageUrl` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 37 | PRIMARY KEY (`id`) 38 | ) ENGINE=InnoDB AUTO_INCREMENT=450 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; 39 | /*!40101 SET character_set_client = @saved_cs_client */; 40 | /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; 41 | 42 | /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; 43 | /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; 44 | /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; 45 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; 46 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; 47 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; 48 | /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; 49 | 50 | -- Dump completed on 2019-07-15 17:11:52 51 | -------------------------------------------------------------------------------- /BookCrawler-v2.0/bookcrawler-v2.0/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | pers.huangyuhui 8 | bookcrawler 9 | 1.0-SNAPSHOT 10 | 11 | bookcrawler-v2.0 12 | my second program for crawler 13 | https://github.com/YUbuntu0109/Crawler-learning 14 | 15 | 16 | UTF-8 17 | 11 18 | 11 19 | 20 | 21 | 22 | 23 | 24 | us.codecraft 25 | webmagic-core 26 | 0.7.3 27 | 28 | 29 | us.codecraft 30 | webmagic-extension 31 | 0.7.3 32 | 33 | 34 | org.slf4j 35 | slf4j-log4j12 36 | 37 | 38 | 39 | 40 | 41 | org.mybatis 42 | mybatis 43 | 3.5.1 44 | 45 | 46 | 47 | mysql 48 | mysql-connector-java 49 | 8.0.16 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | maven-clean-plugin 58 | 3.1.0 59 | 60 | 61 | maven-resources-plugin 62 | 3.0.2 63 | 64 | 65 | maven-compiler-plugin 66 | 3.8.0 67 | 68 | 69 | maven-surefire-plugin 70 | 2.22.1 71 | 72 | 73 | maven-jar-plugin 74 | 3.0.2 75 | 76 | 77 | maven-install-plugin 78 | 2.5.2 79 | 80 | 81 | maven-deploy-plugin 82 | 2.8.2 83 | 84 | 85 | maven-site-plugin 86 | 3.7.1 87 | 88 | 89 | 90 | 91 | 92 | src/main/java 93 | 94 | **/*.xml 95 | 96 | 97 | 98 | 99 | -------------------------------------------------------------------------------- /BookCrawler-v2.0/bookcrawler-v2.0/src/main/java/pers/huangyuhui/bookcrawler/BookCrawlerTest.java: -------------------------------------------------------------------------------- 1 | package pers.huangyuhui.bookcrawler; 2 | 3 | 4 | import pers.huangyuhui.bookcrawler.task.BookProcessor; 5 | 6 | /** 7 | * @project: bookcrawler 8 | * @description: 爬虫测试程序 9 | * @author: 黄宇辉 10 | * @date: 7/11/2019-9:12 PM 11 | * @version: 2.0 12 | * @website: https://yubuntu0109.github.io/ 13 | */ 14 | public class BookCrawlerTest { 15 | //自定义搜索关键字 16 | private static final String KEY_WORD = "人工智能"; 17 | //自定义页码数,每页可爬取三十条数据(注:下一页的页码数为前一页的页码数加二) 18 | private static final int END_PAGE_NUM = 6; 19 | private static final int CURRENT_PAGE_NUM = 1; 20 | //自定义存储书籍图片的文件夹路径 21 | private static final String IMAGE_PATH = "D:\\BookCrawler-V2.0\\download\\image\\"; 22 | //书籍列表页面的链接 23 | private static final String URL = "https://search.jd.com/Search?keyword=" + KEY_WORD + "&enc=utf-8&page="; 24 | 25 | /** 26 | * @description: 🕷启动爬虫 27 | * @date: 2019-07-15 4:09 PM 28 | */ 29 | public static void main(String[] args) { 30 | new BookProcessor(URL, IMAGE_PATH, CURRENT_PAGE_NUM, END_PAGE_NUM).run(); 31 | } 32 | } -------------------------------------------------------------------------------- /BookCrawler-v2.0/bookcrawler-v2.0/src/main/java/pers/huangyuhui/bookcrawler/dao/BookDao.java: -------------------------------------------------------------------------------- 1 | package pers.huangyuhui.bookcrawler.dao; 2 | 3 | import org.apache.ibatis.session.SqlSession; 4 | import pers.huangyuhui.bookcrawler.pojo.Book; 5 | import pers.huangyuhui.bookcrawler.util.MyBatisUtils; 6 | 7 | /** 8 | * @project: bookcrawler 9 | * @description: 操控图书信息 10 | * @author: 黄宇辉 11 | * @date: 7/15/2019-10:25 AM 12 | * @version: 2.0 13 | * @website: https://yubuntu0109.github.io/ 14 | */ 15 | public class BookDao { 16 | 17 | private final String NAME_SPACE = "pers.huangyuhui.bookcrawler.mapper.BookMapper.insert"; 18 | 19 | /** 20 | * @description: 将图书信息存储到数据库 21 | * @param: book 22 | * @date: 2019-07-15 10:30 AM 23 | * @return: boolean 24 | */ 25 | public boolean insert(Book book) { 26 | try (SqlSession sqlSession = MyBatisUtils.getSession()) { 27 | return sqlSession.insert(NAME_SPACE, book) > 0; 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /BookCrawler-v2.0/bookcrawler-v2.0/src/main/java/pers/huangyuhui/bookcrawler/mapper/BookMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | INSERT INTO jd_book(shCode, name, author, publishing, pubDate, imageName, bookUrl, imageUrl) 7 | VALUES (#{shCode}, #{name}, #{author}, #{publishing}, #{pubDate}, #{imageName}, #{bookUrl}, #{imageUrl}) 8 | 9 | -------------------------------------------------------------------------------- /BookCrawler-v2.0/bookcrawler-v2.0/src/main/java/pers/huangyuhui/bookcrawler/pojo/Book.java: -------------------------------------------------------------------------------- 1 | package pers.huangyuhui.bookcrawler.pojo; 2 | 3 | /** 4 | * @project: bookcrawler 5 | * @description: 图书信息 6 | * @author: 黄宇辉 7 | * @date: 7/11/2019-9:12 PM 8 | * @version: 2.0 9 | * @website: https://yubuntu0109.github.io/ 10 | */ 11 | public class Book { 12 | 13 | private Integer id; 14 | private String shCode;//商品编码 15 | private String name; 16 | private double price; 17 | private String author; 18 | private String publishing;//出版社 19 | private String pubDate;//出版时间 20 | private String imageName;//图书图片名 21 | private String bookUrl;//图书链接 22 | private String imageUrl;//图书图片链接 23 | 24 | public Integer getId() { 25 | return id; 26 | } 27 | 28 | public void setId(Integer id) { 29 | this.id = id; 30 | } 31 | 32 | public String getShCode() { 33 | return shCode; 34 | } 35 | 36 | public void setShCode(String shCode) { 37 | this.shCode = shCode; 38 | } 39 | 40 | public String getName() { 41 | return name; 42 | } 43 | 44 | public void setName(String name) { 45 | this.name = name; 46 | } 47 | 48 | public double getPrice() { 49 | return price; 50 | } 51 | 52 | public void setPrice(double price) { 53 | this.price = price; 54 | } 55 | 56 | public String getAuthor() { 57 | return author; 58 | } 59 | 60 | public void setAuthor(String author) { 61 | this.author = author; 62 | } 63 | 64 | public String getPublishing() { 65 | return publishing; 66 | } 67 | 68 | public void setPublishing(String publishing) { 69 | this.publishing = publishing; 70 | } 71 | 72 | public String getPubDate() { 73 | return pubDate; 74 | } 75 | 76 | public void setPubDate(String pubDate) { 77 | this.pubDate = pubDate; 78 | } 79 | 80 | public String getImageName() { 81 | return imageName; 82 | } 83 | 84 | public void setImageName(String imageName) { 85 | this.imageName = imageName; 86 | } 87 | 88 | public String getBookUrl() { 89 | return bookUrl; 90 | } 91 | 92 | public void setBookUrl(String bookUrl) { 93 | this.bookUrl = bookUrl; 94 | } 95 | 96 | public String getImageUrl() { 97 | return imageUrl; 98 | } 99 | 100 | public void setImageUrl(String imageUrl) { 101 | this.imageUrl = imageUrl; 102 | } 103 | 104 | @Override 105 | public String toString() { 106 | return "Book{" + 107 | "shCode='" + shCode + '\'' + 108 | ", name='" + name + '\'' + 109 | ", price=" + price + 110 | ", author='" + author + '\'' + 111 | ", publishing='" + publishing + '\'' + 112 | ", pubDate='" + pubDate + '\'' + 113 | ", imageName='" + imageName + '\'' + 114 | ", bookUrl='" + bookUrl + '\'' + 115 | ", imageUrl='" + imageUrl + '\'' + 116 | '}'; 117 | } 118 | } -------------------------------------------------------------------------------- /BookCrawler-v2.0/bookcrawler-v2.0/src/main/java/pers/huangyuhui/bookcrawler/util/HttpUtils.java: -------------------------------------------------------------------------------- 1 | package pers.huangyuhui.bookcrawler.util; 2 | 3 | import org.apache.http.client.config.RequestConfig; 4 | import org.apache.http.client.methods.CloseableHttpResponse; 5 | import org.apache.http.client.methods.HttpGet; 6 | import org.apache.http.impl.client.CloseableHttpClient; 7 | import org.apache.http.impl.client.HttpClients; 8 | import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; 9 | 10 | import java.io.File; 11 | import java.io.FileOutputStream; 12 | import java.io.IOException; 13 | import java.util.UUID; 14 | 15 | /** 16 | * @project: bookcrawler 17 | * @description: HttpClient工具类 18 | * @author: 黄宇辉 19 | * @date: 7/9/2019-6:56 PM 20 | * @version: 2.0 21 | * @website: https://yubuntu0109.github.io/ 22 | */ 23 | public class HttpUtils { 24 | private static String imageName = null; 25 | private static PoolingHttpClientConnectionManager phccm; 26 | 27 | public HttpUtils() { 28 | phccm = new PoolingHttpClientConnectionManager();//连接池管理器 29 | phccm.setMaxTotal(100);//设置最大连接数 30 | phccm.setDefaultMaxPerRoute(10);//设置每个主机的最大连接数 31 | } 32 | 33 | /** 34 | * @description: 下载图片并使用UUID重命名图片名 35 | * @param: url 36 | * @param: imagePath 37 | * @date: 2019-07-15 5:34 PM 38 | * @return: java.lang.String 39 | */ 40 | public static String doGetImage(String url, String imagePath) { 41 | //创建HttpClient对象 42 | CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(phccm).build(); 43 | //创建HttpGet请求对象,设置请求信息 44 | HttpGet httpGet = new HttpGet(url); 45 | httpGet.setConfig(getConfig()); 46 | //发起请求,获取响应 47 | try (CloseableHttpResponse response = httpClient.execute(httpGet)) { 48 | //解析响应,获取数据 49 | if (response.getStatusLine().getStatusCode() == 200) { 50 | //判断响应体是否为空 51 | if (response.getEntity() != null) { 52 | String suffix = url.substring(url.lastIndexOf("."));//获取图片后缀 53 | imageName = UUID.randomUUID().toString() + suffix;//重命名图片名 54 | //若存储图片的目录不存在,则创建该目录 55 | File file = new File(imagePath); 56 | if (!file.exists()) { 57 | file.mkdirs(); 58 | } 59 | //将图片下载到指定文件夹 60 | response.getEntity().writeTo(new FileOutputStream(imagePath + imageName)); 61 | } 62 | } 63 | } catch (IOException e) { 64 | e.printStackTrace(); 65 | } 66 | return imageName; 67 | } 68 | 69 | /** 70 | * @description: 自定义请求配置信息 71 | * @date: 2019-07-09 7:29 PM 72 | * @return: org.apache.http.client.config.RequestConfig 73 | */ 74 | private static RequestConfig getConfig() { 75 | return RequestConfig.custom() 76 | .setConnectTimeout(10000) //创建连接的最长时间 77 | .setConnectionRequestTimeout(20000) //获取连接的最长时间 78 | .setSocketTimeout(20000) //数据传输的最长时间 79 | .build(); 80 | } 81 | 82 | } -------------------------------------------------------------------------------- /BookCrawler-v2.0/bookcrawler-v2.0/src/main/java/pers/huangyuhui/bookcrawler/util/MyBatisUtils.java: -------------------------------------------------------------------------------- 1 | package pers.huangyuhui.bookcrawler.util; 2 | 3 | import org.apache.ibatis.io.Resources; 4 | import org.apache.ibatis.session.SqlSession; 5 | import org.apache.ibatis.session.SqlSessionFactory; 6 | import org.apache.ibatis.session.SqlSessionFactoryBuilder; 7 | 8 | import java.io.IOException; 9 | import java.io.Reader; 10 | 11 | /** 12 | * @project: bookcrawler 13 | * @description: MyBatis工具类 14 | * @author: 黄宇辉 15 | * @date: 7/15/2019-9:27 AM 16 | * @version: 2.0 17 | * @website: https://yubuntu0109.github.io/ 18 | */ 19 | public class MyBatisUtils { 20 | private static SqlSessionFactory sqlSessionFactory = null; 21 | 22 | //初始化SqlSessionFactory对象 23 | static { 24 | try (Reader reader = Resources.getResourceAsReader("mybatis-config.xml")) { 25 | sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); 26 | } catch (IOException e) { 27 | e.printStackTrace(); 28 | } 29 | } 30 | 31 | /** 32 | * @description: 获取SqlSession对象 33 | * @date: 2019-07-15 9:29 AM 34 | * @return: org.apache.ibatis.session.SqlSession 35 | */ 36 | public static SqlSession getSession() { 37 | return sqlSessionFactory.openSession(true);//设置为自动提交 38 | } 39 | } -------------------------------------------------------------------------------- /BookCrawler-v2.0/bookcrawler-v2.0/src/main/resources/db.properties: -------------------------------------------------------------------------------- 1 | jdbc.driver.class=com.mysql.cj.jdbc.Driver 2 | jdbc.connection.url=jdbc:mysql://localhost/crawler?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true 3 | jdbc.connection.username=xxxxxx 4 | jdbc.connection.password=xxxxxx -------------------------------------------------------------------------------- /BookCrawler-v2.0/bookcrawler-v2.0/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | # reference : http://logging.apache.org/log4j/1.2/manual.html 2 | # Set root logger level to ERROR and its only appender to A1. 3 | # 若使用DEBUG级别的日志模式,则输出的日志信息不清晰 4 | log4j.rootLogger=ERROR, A1 5 | # A1 is set to be a ConsoleAppender. 6 | log4j.appender.A1=org.apache.log4j.ConsoleAppender 7 | # A1 uses PatternLayout. 8 | log4j.appender.A1.layout=org.apache.log4j.PatternLayout 9 | log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n -------------------------------------------------------------------------------- /BookCrawler-v2.0/bookcrawler-v2.0/src/main/resources/mybatis-config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/README.md: -------------------------------------------------------------------------------- 1 | > JDBookCrawler 3.0 : 详细介绍及使用指南见 : [`博客文章`](https://yubuntu0109.github.io/2019/07/17/%E5%B0%8F%E7%88%AC%E8%99%AB-JDBookCrawler-V3-0/) 2 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/.gitignore: -------------------------------------------------------------------------------- 1 | target/ 2 | !.mvn/wrapper/maven-wrapper.jar 3 | !**/src/main/** 4 | !**/src/test/** 5 | 6 | ### STS ### 7 | .apt_generated 8 | .classpath 9 | .factorypath 10 | .project 11 | .settings 12 | .springBeans 13 | .sts4-cache 14 | 15 | ### IntelliJ IDEA ### 16 | .idea 17 | *.iws 18 | *.iml 19 | *.ipr 20 | 21 | ### NetBeans ### 22 | /nbproject/private/ 23 | /nbbuild/ 24 | /dist/ 25 | /nbdist/ 26 | /.nb-gradle/ 27 | build/ 28 | 29 | ### VS Code ### 30 | .vscode/ 31 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/crawler.sql: -------------------------------------------------------------------------------- 1 | CREATE DATABASE IF NOT EXISTS `crawler` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */; 2 | USE `crawler`; 3 | -- MySQL dump 10.13 Distrib 8.0.11, for Win64 (x86_64) 4 | -- 5 | -- Host: localhost Database: crawler 6 | -- ------------------------------------------------------ 7 | -- Server version 8.0.11 8 | 9 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; 10 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; 11 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; 12 | SET NAMES utf8 ; 13 | /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; 14 | /*!40103 SET TIME_ZONE='+00:00' */; 15 | /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; 16 | /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; 17 | /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; 18 | /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; 19 | 20 | -- 21 | -- Table structure for table `jd_book` 22 | -- 23 | 24 | DROP TABLE IF EXISTS `jd_book`; 25 | /*!40101 SET @saved_cs_client = @@character_set_client */; 26 | SET character_set_client = utf8mb4 ; 27 | CREATE TABLE `jd_book` ( 28 | `id` int(11) NOT NULL AUTO_INCREMENT, 29 | `shCode` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 30 | `name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 31 | `author` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 32 | `publishing` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 33 | `pubDate` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 34 | `imageName` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 35 | `bookUrl` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 36 | `imageUrl` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 37 | PRIMARY KEY (`id`) 38 | ) ENGINE=InnoDB AUTO_INCREMENT=661 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; 39 | /*!40101 SET character_set_client = @saved_cs_client */; 40 | /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; 41 | 42 | /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; 43 | /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; 44 | /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; 45 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; 46 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; 47 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; 48 | /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; 49 | 50 | -- Dump completed on 2019-07-18 11:11:17 51 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | 6 | 7 | org.springframework.boot 8 | spring-boot-starter-parent 9 | 2.1.6.RELEASE 10 | 11 | 12 | pers.huangyuhui 13 | bookcrawler 14 | 0.0.1-SNAPSHOT 15 | bookcrawler-v3.0 16 | a simple crawler project for Spring Boot 17 | https://github.com/YUbuntu0109/Crawler-learning 18 | 19 | 20 | 11 21 | 22 | 23 | 24 | 25 | 26 | us.codecraft 27 | webmagic-core 28 | 0.7.3 29 | 30 | 31 | us.codecraft 32 | webmagic-extension 33 | 0.7.3 34 | 35 | 36 | org.slf4j 37 | slf4j-log4j12 38 | 39 | 40 | 41 | 42 | 43 | org.springframework.boot 44 | spring-boot-starter-web 45 | 46 | 47 | 48 | org.springframework.boot 49 | spring-boot-starter-thymeleaf 50 | 51 | 52 | 53 | org.mybatis.spring.boot 54 | mybatis-spring-boot-starter 55 | 2.0.1 56 | 57 | 58 | 59 | mysql 60 | mysql-connector-java 61 | 8.0.15 62 | 63 | 64 | 65 | com.github.pagehelper 66 | pagehelper-spring-boot-starter 67 | 1.2.5 68 | 69 | 70 | 71 | 72 | 73 | 74 | org.springframework.boot 75 | spring-boot-maven-plugin 76 | 77 | 78 | 79 | 80 | 81 | src/main/java 82 | 83 | **/*.xml 84 | 85 | 86 | 87 | 88 | src/main/resources 89 | 90 | **/** 91 | 92 | 93 | 94 | 95 | src/main/java/pers/huangyuhui/bookcrawler/crawler/resources 96 | 97 | **/** 98 | 99 | 100 | 101 | 102 | 103 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/java/pers/huangyuhui/bookcrawler/BookcrawlerApplication.java: -------------------------------------------------------------------------------- 1 | package pers.huangyuhui.bookcrawler; 2 | 3 | import org.mybatis.spring.annotation.MapperScan; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | 7 | /** 8 | * @project: bookcrawler 9 | * @description: 项目启动类 10 | * @author: 黄宇辉 11 | * @date: 7/11/2019-9:16 PM 12 | * @version: 3.0 13 | * @website: https://yubuntu0109.github.io/ 14 | */ 15 | @SpringBootApplication 16 | @MapperScan("pers.huangyuhui.bookcrawler.dao") //扫描Mapper接口 17 | public class BookcrawlerApplication { 18 | 19 | public static void main(String[] args) { SpringApplication.run(BookcrawlerApplication.class, args); } 20 | 21 | } -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/java/pers/huangyuhui/bookcrawler/controller/BookController.java: -------------------------------------------------------------------------------- 1 | package pers.huangyuhui.bookcrawler.controller; 2 | 3 | import com.github.pagehelper.PageHelper; 4 | import com.github.pagehelper.PageInfo; 5 | import org.springframework.stereotype.Controller; 6 | import org.springframework.web.bind.annotation.*; 7 | import pers.huangyuhui.bookcrawler.pojo.Book; 8 | import pers.huangyuhui.bookcrawler.service.BookService; 9 | 10 | import javax.annotation.Resource; 11 | import java.util.HashMap; 12 | import java.util.List; 13 | import java.util.Map; 14 | 15 | /** 16 | * @project: bookcrawler 17 | * @description: 图书信息页控制器 18 | * @author: 黄宇辉 19 | * @date: 7/12/2019-6:47 AM 20 | * @version: 3.0 21 | * @website: https://yubuntu0109.github.io/ 22 | */ 23 | @Controller 24 | @RequestMapping("/bookCrawler") 25 | public class BookController { 26 | 27 | @Resource 28 | private BookService bookService; 29 | 30 | //存储预返回页面的结果对象 31 | private Map result = new HashMap<>(); 32 | 33 | /** 34 | * @description: 跳转到项目主页 35 | * @date: 2019-07-12 7:14 AM 36 | * @return: java.lang.String 37 | */ 38 | @GetMapping("/goMainView") 39 | public String goMainView() { 40 | return "main"; 41 | } 42 | 43 | /** 44 | * @description: 跳转到图书信息管理页 45 | * @date: 2019-07-12 7:15 AM 46 | * @return: java.lang.String 47 | */ 48 | @GetMapping("goBookListView") 49 | public String goBookListView() { 50 | return "bookList"; 51 | } 52 | 53 | 54 | /** 55 | * @description: 分页查询:根据图书名获取指定/所有图书信息 56 | * @param: page 当前页码数 57 | * @param: rows 列表行数 58 | * @param: bookname 图书名称 59 | * @date: 2019-07-17 8:20 AM 60 | * @return: java.util.Map 61 | */ 62 | @PostMapping("/getBookList") 63 | @ResponseBody 64 | public Map getBookList(Integer page, Integer rows, String bookname) { 65 | //获取查询的图书名 66 | Book book = new Book(); 67 | book.setName(bookname); 68 | //设置分页数据 69 | PageHelper.startPage(page, rows); 70 | //根据图书名获取指定或所有图书信息 71 | List list = bookService.findAll(book); 72 | //封装查询结果 73 | PageInfo pageInfo = new PageInfo<>(list); 74 | //获取总记录数 75 | long total = pageInfo.getTotal(); 76 | //获取当前页数据列表 77 | List bookList = pageInfo.getList(); 78 | //存储数据对象 79 | result.put("total", total); 80 | result.put("rows", bookList); 81 | 82 | return result; 83 | } 84 | 85 | /** 86 | * @description: 根据id修改指定图书信息 87 | * @param: book 88 | * @date: 2019-07-17 8:23 AM 89 | * @return: java.util.Map 90 | */ 91 | @PostMapping("/editBook") 92 | @ResponseBody 93 | public Map editBook(Book book) { 94 | //需排除只修改图书名以外信息的操作 95 | Book b = bookService.findByName(book.getName()); 96 | if (b != null) { 97 | if (!(book.getId().equals(b.getId()))) { 98 | result.put("success", false); 99 | result.put("msg", "该图书名称已存在! 请检查后重试哟!"); 100 | return result; 101 | } 102 | } 103 | //添加操作 104 | if (bookService.modify(book) > 0) { 105 | result.put("success", true); 106 | } else { 107 | result.put("success", false); 108 | result.put("msg", "添加失败! (ಥ_ಥ)服务器端发生异常!"); 109 | } 110 | return result; 111 | } 112 | 113 | /** 114 | * @description: 删除指定id的图书信息 115 | * @param: ids 拼接后的id 116 | * @date: 2019-07-17 8:21 AM 117 | * @return: java.util.Map 118 | */ 119 | @PostMapping("/deleteBook") 120 | @ResponseBody 121 | public Map deleteBook(@RequestParam(value = "ids[]", required = true) Integer[] ids) { 122 | if (bookService.delete(ids) > 0) { 123 | result.put("success", true); 124 | } else { 125 | result.put("success", false); 126 | } 127 | return result; 128 | } 129 | } -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/java/pers/huangyuhui/bookcrawler/crawler/BookCrawlerTest.java: -------------------------------------------------------------------------------- 1 | package pers.huangyuhui.bookcrawler.crawler; 2 | 3 | 4 | import pers.huangyuhui.bookcrawler.crawler.task.BookProcessor; 5 | import pers.huangyuhui.bookcrawler.crawler.util.FileUtils; 6 | 7 | /** 8 | * @project: bookcrawler 9 | * @description: 爬虫测试程序 10 | * @author: 黄宇辉 11 | * @date: 7/11/2019-9:12 PM 12 | * @version: 2.0 13 | * @website: https://yubuntu0109.github.io/ 14 | */ 15 | public class BookCrawlerTest { 16 | //自定义搜索关键字 17 | private static final String KEY_WORD = "网络爬虫"; 18 | //自定义页码数,每页可爬取三十条数据(注:下一页的页码数为前一页的页码数加二) 19 | private static final int END_PAGE_NUM = 2; 20 | private static final int CURRENT_PAGE_NUM = 1; 21 | //获取项目下存储书籍图片的文件夹路径 22 | private static final String IMAGE_PATH = FileUtils.getDirPath("/static/download/bookImage/"); 23 | //书籍列表页面的链接 24 | private static final String URL = "https://search.jd.com/Search?keyword=" + KEY_WORD + "&enc=utf-8&page="; 25 | 26 | /** 27 | * @description: 🕷启动爬虫 28 | * @date: 2019-07-15 4:09 PM 29 | */ 30 | public static void main(String[] args) { 31 | new BookProcessor(URL, IMAGE_PATH, CURRENT_PAGE_NUM, END_PAGE_NUM).run(); 32 | } 33 | } -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/java/pers/huangyuhui/bookcrawler/crawler/dao/BookDao.java: -------------------------------------------------------------------------------- 1 | package pers.huangyuhui.bookcrawler.crawler.dao; 2 | 3 | import org.apache.ibatis.session.SqlSession; 4 | import pers.huangyuhui.bookcrawler.crawler.util.MyBatisUtils; 5 | import pers.huangyuhui.bookcrawler.pojo.Book; 6 | 7 | /** 8 | * @project: bookcrawler 9 | * @description: 操控图书信息 10 | * @author: 黄宇辉 11 | * @date: 7/15/2019-10:25 AM 12 | * @version: 2.0 13 | * @website: https://yubuntu0109.github.io/ 14 | */ 15 | public class BookDao { 16 | 17 | private final String NAME_SPACE = "pers.huangyuhui.bookcrawler.crawler.mapper.BookMapper.insert"; 18 | 19 | /** 20 | * @description: 将图书信息存储到数据库 21 | * @param: book 22 | * @date: 2019-07-15 10:30 AM 23 | * @return: boolean 24 | */ 25 | public boolean insert(Book book) { 26 | try (SqlSession sqlSession = MyBatisUtils.getSqlSession()) { 27 | return sqlSession.insert(NAME_SPACE, book) > 0; 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/java/pers/huangyuhui/bookcrawler/crawler/mapper/BookMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | INSERT INTO jd_book(shCode, name, author, publishing, pubDate, imageName, bookUrl, imageUrl) 7 | VALUES (#{shCode}, #{name}, #{author}, #{publishing}, #{pubDate}, #{imageName}, #{bookUrl}, #{imageUrl}) 8 | 9 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/java/pers/huangyuhui/bookcrawler/crawler/pojo/Book.java: -------------------------------------------------------------------------------- 1 | package pers.huangyuhui.bookcrawler.crawler.pojo; 2 | 3 | /** 4 | * @project: bookcrawler 5 | * @description: 图书信息 6 | * @author: 黄宇辉 7 | * @date: 7/11/2019-9:12 PM 8 | * @version: 2.0 9 | * @website: https://yubuntu0109.github.io/ 10 | */ 11 | public class Book { 12 | 13 | private Integer id; 14 | private String shCode;//商品编码 15 | private String name; 16 | private double price;//未实现 17 | private String author; 18 | private String publishing;//出版社 19 | private String pubDate;//出版时间 20 | private String imageName;//图书图片名 21 | private String bookUrl;//图书链接 22 | private String imageUrl;//图书图片链接 23 | 24 | public Integer getId() { 25 | return id; 26 | } 27 | 28 | public void setId(Integer id) { 29 | this.id = id; 30 | } 31 | 32 | public String getShCode() { 33 | return shCode; 34 | } 35 | 36 | public void setShCode(String shCode) { 37 | this.shCode = shCode; 38 | } 39 | 40 | public String getName() { 41 | return name; 42 | } 43 | 44 | public void setName(String name) { 45 | this.name = name; 46 | } 47 | 48 | public double getPrice() { 49 | return price; 50 | } 51 | 52 | public void setPrice(double price) { 53 | this.price = price; 54 | } 55 | 56 | public String getAuthor() { 57 | return author; 58 | } 59 | 60 | public void setAuthor(String author) { 61 | this.author = author; 62 | } 63 | 64 | public String getPublishing() { 65 | return publishing; 66 | } 67 | 68 | public void setPublishing(String publishing) { 69 | this.publishing = publishing; 70 | } 71 | 72 | public String getPubDate() { 73 | return pubDate; 74 | } 75 | 76 | public void setPubDate(String pubDate) { 77 | this.pubDate = pubDate; 78 | } 79 | 80 | public String getImageName() { 81 | return imageName; 82 | } 83 | 84 | public void setImageName(String imageName) { 85 | this.imageName = imageName; 86 | } 87 | 88 | public String getBookUrl() { 89 | return bookUrl; 90 | } 91 | 92 | public void setBookUrl(String bookUrl) { 93 | this.bookUrl = bookUrl; 94 | } 95 | 96 | public String getImageUrl() { 97 | return imageUrl; 98 | } 99 | 100 | public void setImageUrl(String imageUrl) { 101 | this.imageUrl = imageUrl; 102 | } 103 | 104 | @Override 105 | public String toString() { 106 | return "Book{" + 107 | "shCode='" + shCode + '\'' + 108 | ", name='" + name + '\'' + 109 | ", price=" + price + 110 | ", author='" + author + '\'' + 111 | ", publishing='" + publishing + '\'' + 112 | ", pubDate='" + pubDate + '\'' + 113 | ", imageName='" + imageName + '\'' + 114 | ", bookUrl='" + bookUrl + '\'' + 115 | ", imageUrl='" + imageUrl + '\'' + 116 | '}'; 117 | } 118 | } -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/java/pers/huangyuhui/bookcrawler/crawler/resources/db.properties: -------------------------------------------------------------------------------- 1 | jdbc.driver.class=com.mysql.cj.jdbc.Driver 2 | jdbc.connection.url=jdbc:mysql://localhost/crawler?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true 3 | jdbc.connection.username=xxxxxx 4 | jdbc.connection.password=xxxxxx -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/java/pers/huangyuhui/bookcrawler/crawler/resources/log4j.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/java/pers/huangyuhui/bookcrawler/crawler/resources/log4j.properties -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/java/pers/huangyuhui/bookcrawler/crawler/resources/mybatis-config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/java/pers/huangyuhui/bookcrawler/crawler/util/FileUtils.java: -------------------------------------------------------------------------------- 1 | package pers.huangyuhui.bookcrawler.crawler.util; 2 | 3 | import org.springframework.util.ResourceUtils; 4 | 5 | import java.io.FileNotFoundException; 6 | import java.net.URLDecoder; 7 | import java.nio.charset.StandardCharsets; 8 | 9 | /** 10 | * @project: bookcrawler 11 | * @description: 文件工具类 12 | * @author: 黄宇辉 13 | * @date: 7/17/2019-6:47 AM 14 | * @version: 1.0 15 | * @website: https://yubuntu0109.github.io/ 16 | */ 17 | public class FileUtils { 18 | private static String dirPath = null; 19 | 20 | /** 21 | * @description: 获取项目下存储书籍图片的文件夹路径 22 | * @param: downloadPath 23 | * @date: 2019-07-17 6:57 AM 24 | * @return: java.lang.String 25 | */ 26 | public static String getDirPath(String downloadPath) { 27 | try { 28 | //指定存储书籍图片文件夹的完整路径(项目发布路径): 若不使用绝对路径,则Spring boot会默认将上传的文件存储到临时目录中 29 | dirPath = URLDecoder.decode(ResourceUtils.getURL("classpath:").getPath(), StandardCharsets.UTF_8) + downloadPath; 30 | } catch (FileNotFoundException e) { 31 | e.printStackTrace(); 32 | } 33 | //debug: /E:/Intellij IDEA/workbench/workbench_project/SpringBoot/bookcrawler-v3.0/target/classes//static/icon/bookImage/ 34 | return dirPath; 35 | } 36 | } -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/java/pers/huangyuhui/bookcrawler/crawler/util/HttpUtils.java: -------------------------------------------------------------------------------- 1 | package pers.huangyuhui.bookcrawler.crawler.util; 2 | 3 | import org.apache.http.client.config.RequestConfig; 4 | import org.apache.http.client.methods.CloseableHttpResponse; 5 | import org.apache.http.client.methods.HttpGet; 6 | import org.apache.http.impl.client.CloseableHttpClient; 7 | import org.apache.http.impl.client.HttpClients; 8 | import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; 9 | 10 | import java.io.File; 11 | import java.io.FileOutputStream; 12 | import java.io.IOException; 13 | import java.util.UUID; 14 | 15 | /** 16 | * @project: bookcrawler 17 | * @description: HttpClient工具类 18 | * @author: 黄宇辉 19 | * @date: 7/9/2019-6:56 PM 20 | * @version: 2.0 21 | * @website: https://yubuntu0109.github.io/ 22 | */ 23 | public class HttpUtils { 24 | private static String imageName = null; 25 | private static PoolingHttpClientConnectionManager phccm; 26 | 27 | public HttpUtils() { 28 | phccm = new PoolingHttpClientConnectionManager();//连接池管理器 29 | phccm.setMaxTotal(100);//设置最大连接数 30 | phccm.setDefaultMaxPerRoute(10);//设置每个主机的最大连接数 31 | } 32 | 33 | /** 34 | * @description: 下载图片并使用UUID重命名图片名 35 | * @param: url 36 | * @param: imagePath 37 | * @date: 2019-07-15 5:34 PM 38 | * @return: java.lang.String 39 | */ 40 | public static String doGetImage(String url, String imagePath) { 41 | //创建HttpClient对象 42 | CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(phccm).build(); 43 | //创建HttpGet请求对象,设置请求信息 44 | HttpGet httpGet = new HttpGet(url); 45 | httpGet.setConfig(getConfig()); 46 | //发起请求,获取响应 47 | try (CloseableHttpResponse response = httpClient.execute(httpGet)) { 48 | //解析响应,获取数据 49 | if (response.getStatusLine().getStatusCode() == 200) { 50 | //判断响应体是否为空 51 | if (response.getEntity() != null) { 52 | String suffix = url.substring(url.lastIndexOf("."));//获取图片后缀 53 | imageName = UUID.randomUUID().toString() + suffix;//重命名图片名 54 | //若存储图片的目录不存在,则创建该目录 55 | File file = new File(imagePath); 56 | if (!file.exists()) { 57 | file.mkdirs(); 58 | } 59 | //将图片下载到指定文件夹 60 | response.getEntity().writeTo(new FileOutputStream(imagePath + imageName)); 61 | } 62 | } 63 | } catch (IOException e) { 64 | e.printStackTrace(); 65 | } 66 | return imageName; 67 | } 68 | 69 | /** 70 | * @description: 自定义请求配置信息 71 | * @date: 2019-07-09 7:29 PM 72 | * @return: org.apache.http.client.config.RequestConfig 73 | */ 74 | private static RequestConfig getConfig() { 75 | return RequestConfig.custom() 76 | .setConnectTimeout(10000) //创建连接的最长时间 77 | .setConnectionRequestTimeout(20000) //获取连接的最长时间 78 | .setSocketTimeout(20000) //数据传输的最长时间 79 | .build(); 80 | } 81 | 82 | } -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/java/pers/huangyuhui/bookcrawler/crawler/util/MyBatisUtils.java: -------------------------------------------------------------------------------- 1 | package pers.huangyuhui.bookcrawler.crawler.util; 2 | 3 | import org.apache.ibatis.io.Resources; 4 | import org.apache.ibatis.session.SqlSession; 5 | import org.apache.ibatis.session.SqlSessionFactory; 6 | import org.apache.ibatis.session.SqlSessionFactoryBuilder; 7 | 8 | import java.io.IOException; 9 | import java.io.Reader; 10 | 11 | /** 12 | * @project: bookcrawler 13 | * @description: MyBatis工具类 14 | * @author: 黄宇辉 15 | * @date: 7/15/2019-9:27 AM 16 | * @version: 2.0 17 | * @website: https://yubuntu0109.github.io/ 18 | */ 19 | public class MyBatisUtils { 20 | private static SqlSessionFactory sqlSessionFactory = null; 21 | 22 | //初始化SqlSessionFactory对象 23 | static { 24 | try (Reader reader = Resources.getResourceAsReader("mybatis-config.xml")) { 25 | sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); 26 | } catch (IOException e) { 27 | e.printStackTrace(); 28 | } 29 | } 30 | 31 | /** 32 | * @description: 获取SqlSession对象 33 | * @date: 2019-07-15 9:29 AM 34 | * @return: org.apache.ibatis.session.SqlSession 35 | */ 36 | public static SqlSession getSqlSession() { 37 | return sqlSessionFactory.openSession(true);//设置为自动提交 38 | } 39 | } -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/java/pers/huangyuhui/bookcrawler/dao/BookMapper.java: -------------------------------------------------------------------------------- 1 | package pers.huangyuhui.bookcrawler.dao; 2 | 3 | import pers.huangyuhui.bookcrawler.pojo.Book; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * @project: bookcrawler 9 | * @description: 数据访问层-操控图书信息 10 | * @author: 黄宇辉 11 | * @date: 7/11/2019-9:16 PM 12 | * @version: 3.0 13 | * @website: https://yubuntu0109.github.io/ 14 | */ 15 | public interface BookMapper { 16 | 17 | // TODO: 7/17/2019 根据图书名查询指定图书信息 18 | Book selectByName(String name); 19 | 20 | // TODO: 7/17/2019 查询所有图书信息 21 | List selectAll(Book book); 22 | 23 | // TODO: 7/17/2019 修改指定id的图书信息 24 | int updateById(Book book); 25 | 26 | // TODO: 7/17/2019 删除指定id的图书信息 27 | int deleteById(Integer[] id); 28 | 29 | } -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/java/pers/huangyuhui/bookcrawler/dao/BookMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 19 | 20 | 21 | UPDATE jd_book 22 | 23 | name=#{name}, 24 | author=#{author}, 25 | publishing=#{publishing}, 26 | pubDate=#{pubDate}, 27 | imageUrl=#{imageUrl} 28 | 29 | WHERE id = #{id} 30 | 31 | 32 | 33 | DELETE FROM jd_book WHERE id IN 34 | 35 | #{ids} 36 | 37 | 38 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/java/pers/huangyuhui/bookcrawler/pojo/Book.java: -------------------------------------------------------------------------------- 1 | package pers.huangyuhui.bookcrawler.pojo; 2 | 3 | /** 4 | * @project: bookcrawler 5 | * @description: 图书信息 6 | * @author: 黄宇辉 7 | * @date: 7/11/2019-9:12 PM 8 | * @version: 3.0 9 | * @website: https://yubuntu0109.github.io/ 10 | */ 11 | public class Book { 12 | 13 | private Integer id; 14 | private String shCode;//商品编码 15 | private String name; 16 | private double price;//未实现 17 | private String author; 18 | private String publishing;//出版社 19 | private String pubDate;//出版时间 20 | private String imageName;//图书图片名 21 | private String bookUrl;//图书商品链接 22 | private String imageUrl;//图书图片链接 23 | 24 | public Integer getId() { 25 | return id; 26 | } 27 | 28 | public void setId(Integer id) { 29 | this.id = id; 30 | } 31 | 32 | public String getShCode() { 33 | return shCode; 34 | } 35 | 36 | public void setShCode(String shCode) { 37 | this.shCode = shCode; 38 | } 39 | 40 | public String getName() { 41 | return name; 42 | } 43 | 44 | public void setName(String name) { 45 | this.name = name; 46 | } 47 | 48 | public double getPrice() { 49 | return price; 50 | } 51 | 52 | public void setPrice(double price) { 53 | this.price = price; 54 | } 55 | 56 | public String getAuthor() { 57 | return author; 58 | } 59 | 60 | public void setAuthor(String author) { 61 | this.author = author; 62 | } 63 | 64 | public String getPublishing() { 65 | return publishing; 66 | } 67 | 68 | public void setPublishing(String publishing) { 69 | this.publishing = publishing; 70 | } 71 | 72 | public String getPubDate() { 73 | return pubDate; 74 | } 75 | 76 | public void setPubDate(String pubDate) { 77 | this.pubDate = pubDate; 78 | } 79 | 80 | public String getImageName() { 81 | return imageName; 82 | } 83 | 84 | public void setImageName(String imageName) { 85 | this.imageName = imageName; 86 | } 87 | 88 | public String getBookUrl() { 89 | return bookUrl; 90 | } 91 | 92 | public void setBookUrl(String bookUrl) { 93 | this.bookUrl = bookUrl; 94 | } 95 | 96 | public String getImageUrl() { 97 | return imageUrl; 98 | } 99 | 100 | public void setImageUrl(String imageUrl) { 101 | this.imageUrl = imageUrl; 102 | } 103 | 104 | @Override 105 | public String toString() { 106 | return "Book{" + 107 | "id=" + id + 108 | ", shCode='" + shCode + '\'' + 109 | ", name='" + name + '\'' + 110 | ", price=" + price + 111 | ", author='" + author + '\'' + 112 | ", publishing='" + publishing + '\'' + 113 | ", pubDate='" + pubDate + '\'' + 114 | ", imageName='" + imageName + '\'' + 115 | ", bookUrl='" + bookUrl + '\'' + 116 | ", imageUrl='" + imageUrl + '\'' + 117 | '}'; 118 | } 119 | } -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/java/pers/huangyuhui/bookcrawler/service/BookService.java: -------------------------------------------------------------------------------- 1 | package pers.huangyuhui.bookcrawler.service; 2 | 3 | import pers.huangyuhui.bookcrawler.pojo.Book; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * @project: bookcrawler 9 | * @description: 业务层-操控图书信息 10 | * @author: 黄宇辉 11 | * @date: 7/11/2019-9:16 PM 12 | * @version: 3.0 13 | * @website: https://yubuntu0109.github.io/ 14 | */ 15 | public interface BookService { 16 | 17 | // TODO: 7/17/2019 根据图书名查询指定图书信息 18 | Book findByName(String name); 19 | 20 | // TODO: 7/17/2019 查询所有图书信息 21 | List findAll(Book book); 22 | 23 | // TODO: 7/17/2019 修改指定id的图书信息 24 | int modify(Book book); 25 | 26 | // TODO: 7/17/2019 删除指定id的图书信息 27 | int delete(Integer[] id); 28 | } -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/java/pers/huangyuhui/bookcrawler/service/impl/BookServiceImpl.java: -------------------------------------------------------------------------------- 1 | package pers.huangyuhui.bookcrawler.service.impl; 2 | 3 | import org.springframework.stereotype.Service; 4 | import org.springframework.transaction.annotation.Transactional; 5 | import pers.huangyuhui.bookcrawler.dao.BookMapper; 6 | import pers.huangyuhui.bookcrawler.pojo.Book; 7 | import pers.huangyuhui.bookcrawler.service.BookService; 8 | 9 | import javax.annotation.Resource; 10 | import java.util.List; 11 | 12 | /** 13 | * @project: bookcrawler 14 | * @description: 业务层实现类-操控图书信息 15 | * @author: 黄宇辉 16 | * @date: 7/11/2019-9:16 PM 17 | * @version: 3.0 18 | * @website: https://yubuntu0109.github.io/ 19 | */ 20 | @Service 21 | @Transactional 22 | public class BookServiceImpl implements BookService { 23 | 24 | @Resource 25 | private BookMapper bookMapper; 26 | 27 | 28 | @Override 29 | public Book findByName(String name) { return bookMapper.selectByName(name); } 30 | 31 | @Override 32 | public List findAll(Book book) { 33 | return bookMapper.selectAll(book); 34 | } 35 | 36 | @Override 37 | public int modify(Book book) { 38 | return bookMapper.updateById(book); 39 | } 40 | 41 | @Override 42 | public int delete(Integer[] id) { 43 | return bookMapper.deleteById(id); 44 | } 45 | } -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | # JDBC-Connection Configuration Information 2 | spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver 3 | spring.datasource.url=jdbc:mysql://localhost:3306/crawler?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true 4 | spring.datasource.username=xxxxxx 5 | spring.datasource.password=xxxxxx 6 | # MyBatis Configuration Information 7 | mybatis.type-aliases-package=pers.huangyuhui.bookcrawler.pojo 8 | # PageHelper Configuraiton Information 9 | pagehelper.helper-dialect=mysql 10 | pagehelper.params=count=countSql 11 | pagehelper.reasonable=true 12 | pagehelper.support-methods-arguments=true 13 | # Thymeleaf Configuration Information 14 | spring.thymeleaf.cache=false 15 | spring.thymeleaf.check-template=true 16 | spring.thymeleaf.check-template-location=true 17 | spring.thymeleaf.encoding=UTF-8 18 | spring.thymeleaf.suffix=.html 19 | spring.thymeleaf.prefix=classpath:/templates/ 20 | spring.thymeleaf.servlet.content-type=text/html 21 | # Resource-Filter Configuration Information 22 | spring.mvc.static-path-pattern=/static/** 23 | spring.resources.static-locations=classpath:/static/ 24 | # Logging Configuration Information 25 | logging.level.pers.huangyuhui.bookcrawler=debug 26 | logging.file=bookcrawler.log -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/css/default.css: -------------------------------------------------------------------------------- 1 | *{font-size:12px; font-family:Tahoma,Verdana,微软雅黑,新宋体} 2 | body{background:#D2E0F2; } 3 | a{ color:Black; text-decoration:none;} 4 | a:hover{ color:Red; text-decoration:underline;} 5 | .textbox03 {border: #878787 1px solid;padding: 4px 3px;font:Verdana, Geneva, sans-serif,宋体;line-height: 14px; background-color: #fff; height: auto; font-size: 14px; font-weight: bold; width: 190px; } 6 | 7 | .txt01{font:Verdana, Geneva, sans-serif,宋体;padding:3px 2px 2px 2px; border-width:1px; border-color:#ddd; color:#000;} 8 | .txt {border: #878787 1px solid;padding: 4px 3px;font:Verdana, Geneva, sans-serif,宋体;line-height: 14px; background-color: #fff; height: auto; font-size: 14px;} 9 | .footer{text-align:center;color:rebeccapurple; margin:0px; padding:0px;line-height:23px; font: lighter 12px 'Lucida Sans Unicode';} 10 | 11 | .head a{color:White;text-decoration:underline;} 12 | 13 | .easyui-accordion ul{list-style-type:none;margin:0px; padding:10px;} 14 | .easyui-accordion ul li{ padding:0px;} 15 | .easyui-accordion ul li a{line-height:24px;} 16 | .easyui-accordion ul li div{margin:2px 0px;padding-left:10px;padding-top:2px;} 17 | .easyui-accordion ul li div.hover{border:1px dashed #99BBE8; background:#E0ECFF;cursor:pointer;} 18 | .easyui-accordion ul li div.hover a{color:#416AA3;} 19 | .easyui-accordion ul li div.selected{border:1px solid #99BBE8; background:#E0ECFF;cursor:default;} 20 | .easyui-accordion ul li div.selected a{color:#416AA3; font-weight:bold;} 21 | 22 | 23 | 24 | .icon{ background:url(../images/tabicons.png) no-repeat;width:18px; line-height:18px; display:inline-block;} 25 | .icon-sys{ background-position:0px -200px;} 26 | .icon-set{ background-position:-380px -200px;} 27 | .icon-add{background-position: -20px 0px;} 28 | .icon-add1{background:url('icon/edit_add.png') no-repeat;} 29 | .icon-nav{background-position: -100px -20px; } 30 | .icon-users{background-position: -100px -480px;} 31 | .icon-role{background-position: -360px -200px;} 32 | .icon-set{background-position: -380px -200px;} 33 | .icon-log{background-position: -380px -80px;} 34 | .icon-delete16{background:url('icon/delete.gif') no-repeat;width:18px; line-height:18px; display:inline-block;} 35 | .icon-delete{ background-position:-140px -120px;} 36 | .icon-edit{ background-position:-380px -320px;} 37 | .icon-magic{ background-position:0px -500px;} 38 | .icon-database{ background-position:-20px -140px;} 39 | .icon-expand{ background:url('/images/coll2.gif') no-repeat;} 40 | .icon-collapse{ background:url('/images/coll3.gif') no-repeat;} 41 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/css/demo.css: -------------------------------------------------------------------------------- 1 | *{ 2 | font-size:12px; 3 | } 4 | body { 5 | font-family:verdana,helvetica,arial,sans-serif; 6 | padding:20px; 7 | font-size:12px; 8 | margin:0; 9 | } 10 | h2 { 11 | font-size:18px; 12 | font-weight:bold; 13 | margin:0; 14 | margin-bottom:15px; 15 | } 16 | .demo-info{ 17 | padding:0 0 12px 0; 18 | } 19 | .demo-tip{ 20 | display:none; 21 | } 22 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/accordion.css: -------------------------------------------------------------------------------- 1 | .accordion { 2 | overflow: hidden; 3 | border-width: 1px; 4 | border-style: solid; 5 | } 6 | .accordion .accordion-header { 7 | border-width: 0 0 1px; 8 | cursor: pointer; 9 | } 10 | .accordion .accordion-body { 11 | border-width: 0 0 1px; 12 | } 13 | .accordion-noborder { 14 | border-width: 0; 15 | } 16 | .accordion-noborder .accordion-header { 17 | border-width: 0 0 1px; 18 | } 19 | .accordion-noborder .accordion-body { 20 | border-width: 0 0 1px; 21 | } 22 | .accordion-collapse { 23 | background: url('images/accordion_arrows.png') no-repeat 0 0; 24 | } 25 | .accordion-expand { 26 | background: url('images/accordion_arrows.png') no-repeat -16px 0; 27 | } 28 | .accordion { 29 | background: #ffffff; 30 | border-color: #95B8E7; 31 | } 32 | .accordion .accordion-header { 33 | background: #E0ECFF; 34 | filter: none; 35 | } 36 | .accordion .accordion-header-selected { 37 | background: #ffe48d; 38 | } 39 | .accordion .accordion-header-selected .panel-title { 40 | color: #000000; 41 | } 42 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/combo.css: -------------------------------------------------------------------------------- 1 | .combo { 2 | display: inline-block; 3 | white-space: nowrap; 4 | margin: 0; 5 | padding: 0; 6 | border-width: 1px; 7 | border-style: solid; 8 | overflow: hidden; 9 | vertical-align: middle; 10 | } 11 | .combo .combo-text { 12 | font-size: 12px; 13 | border: 0px; 14 | margin: 0; 15 | padding: 0px 2px; 16 | vertical-align: baseline; 17 | } 18 | .combo-arrow { 19 | width: 18px; 20 | height: 20px; 21 | overflow: hidden; 22 | display: inline-block; 23 | vertical-align: top; 24 | cursor: pointer; 25 | opacity: 0.6; 26 | filter: alpha(opacity=60); 27 | } 28 | .combo-arrow-hover { 29 | opacity: 1.0; 30 | filter: alpha(opacity=100); 31 | } 32 | .combo-panel { 33 | overflow: auto; 34 | } 35 | .combo-arrow { 36 | background: url('images/combo_arrow.png') no-repeat center center; 37 | } 38 | .combo-panel { 39 | background-color: #ffffff; 40 | } 41 | .combo { 42 | border-color: #95B8E7; 43 | background-color: #fff; 44 | } 45 | .combo-arrow { 46 | background-color: #E0ECFF; 47 | } 48 | .combo-arrow-hover { 49 | background-color: #eaf2ff; 50 | } 51 | .combo-arrow:hover { 52 | background-color: #eaf2ff; 53 | } 54 | .combo .textbox-icon-disabled:hover { 55 | cursor: default; 56 | } 57 | .textbox-invalid { 58 | border-color: #ffa8a8; 59 | background-color: #fff3f3; 60 | } 61 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/combobox.css: -------------------------------------------------------------------------------- 1 | .combobox-item, 2 | .combobox-group { 3 | font-size: 12px; 4 | padding: 3px; 5 | padding-right: 0px; 6 | } 7 | .combobox-item-disabled { 8 | opacity: 0.5; 9 | filter: alpha(opacity=50); 10 | } 11 | .combobox-gitem { 12 | padding-left: 10px; 13 | } 14 | .combobox-group { 15 | font-weight: bold; 16 | } 17 | .combobox-item-hover { 18 | background-color: #eaf2ff; 19 | color: #000000; 20 | } 21 | .combobox-item-selected { 22 | background-color: #ffe48d; 23 | color: #000000; 24 | } 25 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/datalist.css: -------------------------------------------------------------------------------- 1 | .datalist .datagrid-header { 2 | border-width: 0; 3 | } 4 | .datalist .datagrid-group, 5 | .m-list .m-list-group { 6 | height: 25px; 7 | line-height: 25px; 8 | font-weight: bold; 9 | overflow: hidden; 10 | background-color: #efefef; 11 | border-style: solid; 12 | border-width: 0 0 1px 0; 13 | border-color: #ccc; 14 | } 15 | .datalist .datagrid-group-expander { 16 | display: none; 17 | } 18 | .datalist .datagrid-group-title { 19 | padding: 0 4px; 20 | } 21 | .datalist .datagrid-btable { 22 | width: 100%; 23 | table-layout: fixed; 24 | } 25 | .datalist .datagrid-row td { 26 | border-style: solid; 27 | border-left-color: transparent; 28 | border-right-color: transparent; 29 | border-bottom-width: 0; 30 | } 31 | .datalist-lines .datagrid-row td { 32 | border-bottom-width: 1px; 33 | } 34 | .datalist .datagrid-cell, 35 | .m-list li { 36 | width: auto; 37 | height: auto; 38 | padding: 2px 4px; 39 | line-height: 18px; 40 | position: relative; 41 | white-space: nowrap; 42 | text-overflow: ellipsis; 43 | overflow: hidden; 44 | } 45 | .datalist-link, 46 | .m-list li>a { 47 | display: block; 48 | position: relative; 49 | cursor: pointer; 50 | color: #000000; 51 | text-decoration: none; 52 | overflow: hidden; 53 | margin: -2px -4px; 54 | padding: 2px 4px; 55 | padding-right: 16px; 56 | line-height: 18px; 57 | white-space: nowrap; 58 | text-overflow: ellipsis; 59 | overflow: hidden; 60 | } 61 | .datalist-link::after, 62 | .m-list li>a::after { 63 | position: absolute; 64 | display: block; 65 | width: 8px; 66 | height: 8px; 67 | content: ''; 68 | right: 6px; 69 | top: 50%; 70 | margin-top: -4px; 71 | border-style: solid; 72 | border-width: 1px 1px 0 0; 73 | -ms-transform: rotate(45deg); 74 | -moz-transform: rotate(45deg); 75 | -webkit-transform: rotate(45deg); 76 | -o-transform: rotate(45deg); 77 | transform: rotate(45deg); 78 | } 79 | .m-list { 80 | margin: 0; 81 | padding: 0; 82 | list-style: none; 83 | } 84 | .m-list li { 85 | border-style: solid; 86 | border-width: 0 0 1px 0; 87 | border-color: #ccc; 88 | } 89 | .m-list li>a:hover { 90 | background: #eaf2ff; 91 | color: #000000; 92 | } 93 | .m-list .m-list-group { 94 | padding: 0 4px; 95 | } 96 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/datebox.css: -------------------------------------------------------------------------------- 1 | .datebox-calendar-inner { 2 | height: 180px; 3 | } 4 | .datebox-button { 5 | height: 18px; 6 | padding: 2px 5px; 7 | text-align: center; 8 | } 9 | .datebox-button a { 10 | font-size: 12px; 11 | font-weight: bold; 12 | text-decoration: none; 13 | opacity: 0.6; 14 | filter: alpha(opacity=60); 15 | } 16 | .datebox-button a:hover { 17 | opacity: 1.0; 18 | filter: alpha(opacity=100); 19 | } 20 | .datebox-current, 21 | .datebox-close { 22 | float: left; 23 | } 24 | .datebox-close { 25 | float: right; 26 | } 27 | .datebox .combo-arrow { 28 | background-image: url('images/datebox_arrow.png'); 29 | background-position: center center; 30 | } 31 | .datebox-button { 32 | background-color: #F4F4F4; 33 | } 34 | .datebox-button a { 35 | color: #444; 36 | } 37 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/dialog.css: -------------------------------------------------------------------------------- 1 | .dialog-content { 2 | overflow: auto; 3 | } 4 | .dialog-toolbar { 5 | padding: 2px 5px; 6 | } 7 | .dialog-tool-separator { 8 | float: left; 9 | height: 24px; 10 | border-left: 1px solid #ccc; 11 | border-right: 1px solid #fff; 12 | margin: 2px 1px; 13 | } 14 | .dialog-button { 15 | padding: 5px; 16 | text-align: right; 17 | } 18 | .dialog-button .l-btn { 19 | margin-left: 5px; 20 | } 21 | .dialog-toolbar, 22 | .dialog-button { 23 | background: #F4F4F4; 24 | border-width: 1px; 25 | border-style: solid; 26 | } 27 | .dialog-toolbar { 28 | border-color: #95B8E7 #95B8E7 #dddddd #95B8E7; 29 | } 30 | .dialog-button { 31 | border-color: #dddddd #95B8E7 #95B8E7 #95B8E7; 32 | } 33 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/filebox.css: -------------------------------------------------------------------------------- 1 | .filebox .textbox-value { 2 | vertical-align: top; 3 | position: absolute; 4 | top: 0; 5 | left: -5000px; 6 | } 7 | .filebox-label { 8 | display: inline-block; 9 | position: absolute; 10 | width: 100%; 11 | height: 100%; 12 | cursor: pointer; 13 | left: 0; 14 | top: 0; 15 | z-index: 10; 16 | } 17 | .l-btn-disabled .filebox-label { 18 | cursor: default; 19 | } 20 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/accordion_arrows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/accordion_arrows.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/blank.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/blank.gif -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/calendar_arrows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/calendar_arrows.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/combo_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/combo_arrow.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/datagrid_icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/datagrid_icons.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/datebox_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/datebox_arrow.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/layout_arrows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/layout_arrows.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/linkbutton_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/linkbutton_bg.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/loading.gif -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/menu_arrows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/menu_arrows.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/messager_icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/messager_icons.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/pagination_icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/pagination_icons.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/panel_tools.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/panel_tools.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/searchbox_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/searchbox_button.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/slider_handle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/slider_handle.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/spinner_arrows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/spinner_arrows.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/tabs_icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/tabs_icons.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/tree_icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/tree_icons.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/validatebox_warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/images/validatebox_warning.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/layout.css: -------------------------------------------------------------------------------- 1 | .layout { 2 | position: relative; 3 | overflow: hidden; 4 | margin: 0; 5 | padding: 0; 6 | z-index: 0; 7 | } 8 | .layout-panel { 9 | position: absolute; 10 | overflow: hidden; 11 | } 12 | .layout-panel-east, 13 | .layout-panel-west { 14 | z-index: 2; 15 | } 16 | .layout-panel-north, 17 | .layout-panel-south { 18 | z-index: 3; 19 | } 20 | .layout-expand { 21 | position: absolute; 22 | padding: 0px; 23 | font-size: 1px; 24 | cursor: pointer; 25 | z-index: 1; 26 | } 27 | .layout-expand .panel-header, 28 | .layout-expand .panel-body { 29 | background: transparent; 30 | filter: none; 31 | overflow: hidden; 32 | } 33 | .layout-expand .panel-header { 34 | border-bottom-width: 0px; 35 | } 36 | .layout-split-proxy-h, 37 | .layout-split-proxy-v { 38 | position: absolute; 39 | font-size: 1px; 40 | display: none; 41 | z-index: 5; 42 | } 43 | .layout-split-proxy-h { 44 | width: 5px; 45 | cursor: e-resize; 46 | } 47 | .layout-split-proxy-v { 48 | height: 5px; 49 | cursor: n-resize; 50 | } 51 | .layout-mask { 52 | position: absolute; 53 | background: #fafafa; 54 | filter: alpha(opacity=10); 55 | opacity: 0.10; 56 | z-index: 4; 57 | } 58 | .layout-button-up { 59 | background: url('images/layout_arrows.png') no-repeat -16px -16px; 60 | } 61 | .layout-button-down { 62 | background: url('images/layout_arrows.png') no-repeat -16px 0; 63 | } 64 | .layout-button-left { 65 | background: url('images/layout_arrows.png') no-repeat 0 0; 66 | } 67 | .layout-button-right { 68 | background: url('images/layout_arrows.png') no-repeat 0 -16px; 69 | } 70 | .layout-split-proxy-h, 71 | .layout-split-proxy-v { 72 | background-color: #aac5e7; 73 | } 74 | .layout-split-north { 75 | border-bottom: 5px solid #E6EEF8; 76 | } 77 | .layout-split-south { 78 | border-top: 5px solid #E6EEF8; 79 | } 80 | .layout-split-east { 81 | border-left: 5px solid #E6EEF8; 82 | } 83 | .layout-split-west { 84 | border-right: 5px solid #E6EEF8; 85 | } 86 | .layout-expand { 87 | background-color: #E0ECFF; 88 | } 89 | .layout-expand-over { 90 | background-color: #E0ECFF; 91 | } 92 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/menu.css: -------------------------------------------------------------------------------- 1 | .menu { 2 | position: absolute; 3 | margin: 0; 4 | padding: 2px; 5 | border-width: 1px; 6 | border-style: solid; 7 | overflow: hidden; 8 | } 9 | .menu-inline { 10 | position: relative; 11 | } 12 | .menu-item { 13 | position: relative; 14 | margin: 0; 15 | padding: 0; 16 | overflow: hidden; 17 | white-space: nowrap; 18 | cursor: pointer; 19 | border-width: 1px; 20 | border-style: solid; 21 | } 22 | .menu-text { 23 | height: 20px; 24 | line-height: 20px; 25 | float: left; 26 | padding-left: 28px; 27 | } 28 | .menu-icon { 29 | position: absolute; 30 | width: 16px; 31 | height: 16px; 32 | left: 2px; 33 | top: 50%; 34 | margin-top: -8px; 35 | } 36 | .menu-rightarrow { 37 | position: absolute; 38 | width: 16px; 39 | height: 16px; 40 | right: 0; 41 | top: 50%; 42 | margin-top: -8px; 43 | } 44 | .menu-line { 45 | position: absolute; 46 | left: 26px; 47 | top: 0; 48 | height: 2000px; 49 | font-size: 1px; 50 | } 51 | .menu-sep { 52 | margin: 3px 0px 3px 25px; 53 | font-size: 1px; 54 | } 55 | .menu-noline .menu-line { 56 | display: none; 57 | } 58 | .menu-noline .menu-sep { 59 | margin-left: 0; 60 | margin-right: 0; 61 | } 62 | .menu-active { 63 | -moz-border-radius: 5px 5px 5px 5px; 64 | -webkit-border-radius: 5px 5px 5px 5px; 65 | border-radius: 5px 5px 5px 5px; 66 | } 67 | .menu-item-disabled { 68 | opacity: 0.5; 69 | filter: alpha(opacity=50); 70 | cursor: default; 71 | } 72 | .menu-text, 73 | .menu-text span { 74 | font-size: 12px; 75 | } 76 | .menu-shadow { 77 | position: absolute; 78 | -moz-border-radius: 5px 5px 5px 5px; 79 | -webkit-border-radius: 5px 5px 5px 5px; 80 | border-radius: 5px 5px 5px 5px; 81 | background: #ccc; 82 | -moz-box-shadow: 2px 2px 3px #cccccc; 83 | -webkit-box-shadow: 2px 2px 3px #cccccc; 84 | box-shadow: 2px 2px 3px #cccccc; 85 | filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); 86 | } 87 | .menu-rightarrow { 88 | background: url('images/menu_arrows.png') no-repeat -32px center; 89 | } 90 | .menu-line { 91 | border-left: 1px solid #ccc; 92 | border-right: 1px solid #fff; 93 | } 94 | .menu-sep { 95 | border-top: 1px solid #ccc; 96 | border-bottom: 1px solid #fff; 97 | } 98 | .menu { 99 | background-color: #fafafa; 100 | border-color: #ddd; 101 | color: #444; 102 | } 103 | .menu-content { 104 | background: #ffffff; 105 | } 106 | .menu-item { 107 | border-color: transparent; 108 | _border-color: #fafafa; 109 | } 110 | .menu-active { 111 | border-color: #b7d2ff; 112 | color: #000000; 113 | background: #eaf2ff; 114 | } 115 | .menu-active-disabled { 116 | border-color: transparent; 117 | background: transparent; 118 | color: #444; 119 | } 120 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/menubutton.css: -------------------------------------------------------------------------------- 1 | .m-btn-downarrow, 2 | .s-btn-downarrow { 3 | display: inline-block; 4 | position: absolute; 5 | width: 16px; 6 | height: 16px; 7 | font-size: 1px; 8 | right: 0; 9 | top: 50%; 10 | margin-top: -8px; 11 | } 12 | .m-btn-active, 13 | .s-btn-active { 14 | background: #eaf2ff; 15 | color: #000000; 16 | border: 1px solid #b7d2ff; 17 | filter: none; 18 | } 19 | .m-btn-plain-active, 20 | .s-btn-plain-active { 21 | background: transparent; 22 | padding: 0; 23 | border-width: 1px; 24 | border-style: solid; 25 | -moz-border-radius: 5px 5px 5px 5px; 26 | -webkit-border-radius: 5px 5px 5px 5px; 27 | border-radius: 5px 5px 5px 5px; 28 | } 29 | .m-btn .l-btn-left .l-btn-text { 30 | margin-right: 20px; 31 | } 32 | .m-btn .l-btn-icon-right .l-btn-text { 33 | margin-right: 40px; 34 | } 35 | .m-btn .l-btn-icon-right .l-btn-icon { 36 | right: 20px; 37 | } 38 | .m-btn .l-btn-icon-top .l-btn-text { 39 | margin-right: 4px; 40 | margin-bottom: 14px; 41 | } 42 | .m-btn .l-btn-icon-bottom .l-btn-text { 43 | margin-right: 4px; 44 | margin-bottom: 34px; 45 | } 46 | .m-btn .l-btn-icon-bottom .l-btn-icon { 47 | top: auto; 48 | bottom: 20px; 49 | } 50 | .m-btn .l-btn-icon-top .m-btn-downarrow, 51 | .m-btn .l-btn-icon-bottom .m-btn-downarrow { 52 | top: auto; 53 | bottom: 0px; 54 | left: 50%; 55 | margin-left: -8px; 56 | } 57 | .m-btn-line { 58 | display: inline-block; 59 | position: absolute; 60 | font-size: 1px; 61 | display: none; 62 | } 63 | .m-btn .l-btn-left .m-btn-line { 64 | right: 0; 65 | width: 16px; 66 | height: 500px; 67 | border-style: solid; 68 | border-color: #aac5e7; 69 | border-width: 0 0 0 1px; 70 | } 71 | .m-btn .l-btn-icon-top .m-btn-line, 72 | .m-btn .l-btn-icon-bottom .m-btn-line { 73 | left: 0; 74 | bottom: 0; 75 | width: 500px; 76 | height: 16px; 77 | border-width: 1px 0 0 0; 78 | } 79 | .m-btn-large .l-btn-icon-right .l-btn-text { 80 | margin-right: 56px; 81 | } 82 | .m-btn-large .l-btn-icon-bottom .l-btn-text { 83 | margin-bottom: 50px; 84 | } 85 | .m-btn-downarrow, 86 | .s-btn-downarrow { 87 | background: url('images/menu_arrows.png') no-repeat 0 center; 88 | } 89 | .m-btn-plain-active, 90 | .s-btn-plain-active { 91 | border-color: #b7d2ff; 92 | background-color: #eaf2ff; 93 | color: #000000; 94 | } 95 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/messager.css: -------------------------------------------------------------------------------- 1 | .messager-body { 2 | padding: 10px; 3 | overflow: hidden; 4 | } 5 | .messager-button { 6 | text-align: center; 7 | padding-top: 10px; 8 | } 9 | .messager-button .l-btn { 10 | width: 70px; 11 | } 12 | .messager-icon { 13 | float: left; 14 | width: 32px; 15 | height: 32px; 16 | margin: 0 10px 10px 0; 17 | } 18 | .messager-error { 19 | background: url('images/messager_icons.png') no-repeat scroll -64px 0; 20 | } 21 | .messager-info { 22 | background: url('images/messager_icons.png') no-repeat scroll 0 0; 23 | } 24 | .messager-question { 25 | background: url('images/messager_icons.png') no-repeat scroll -32px 0; 26 | } 27 | .messager-warning { 28 | background: url('images/messager_icons.png') no-repeat scroll -96px 0; 29 | } 30 | .messager-progress { 31 | padding: 10px; 32 | } 33 | .messager-p-msg { 34 | margin-bottom: 5px; 35 | } 36 | .messager-body .messager-input { 37 | width: 100%; 38 | padding: 1px 0; 39 | border: 1px solid #95B8E7; 40 | } 41 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/numberbox.css: -------------------------------------------------------------------------------- 1 | .numberbox { 2 | border: 1px solid #95B8E7; 3 | margin: 0; 4 | padding: 0 2px; 5 | vertical-align: middle; 6 | } 7 | .textbox { 8 | padding: 0; 9 | } 10 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/pagination.css: -------------------------------------------------------------------------------- 1 | .pagination { 2 | zoom: 1; 3 | } 4 | .pagination table { 5 | float: left; 6 | height: 30px; 7 | } 8 | .pagination td { 9 | border: 0; 10 | } 11 | .pagination-btn-separator { 12 | float: left; 13 | height: 24px; 14 | border-left: 1px solid #ccc; 15 | border-right: 1px solid #fff; 16 | margin: 3px 1px; 17 | } 18 | .pagination .pagination-num { 19 | border-width: 1px; 20 | border-style: solid; 21 | margin: 0 2px; 22 | padding: 2px; 23 | width: 2em; 24 | height: auto; 25 | } 26 | .pagination-page-list { 27 | margin: 0px 6px; 28 | padding: 1px 2px; 29 | width: auto; 30 | height: auto; 31 | border-width: 1px; 32 | border-style: solid; 33 | } 34 | .pagination-info { 35 | float: right; 36 | margin: 0 6px 0 0; 37 | padding: 0; 38 | height: 30px; 39 | line-height: 30px; 40 | font-size: 12px; 41 | } 42 | .pagination span { 43 | font-size: 12px; 44 | } 45 | .pagination-link .l-btn-text { 46 | width: 24px; 47 | text-align: center; 48 | margin: 0; 49 | } 50 | .pagination-first { 51 | background: url('images/pagination_icons.png') no-repeat 0 center; 52 | } 53 | .pagination-prev { 54 | background: url('images/pagination_icons.png') no-repeat -16px center; 55 | } 56 | .pagination-next { 57 | background: url('images/pagination_icons.png') no-repeat -32px center; 58 | } 59 | .pagination-last { 60 | background: url('images/pagination_icons.png') no-repeat -48px center; 61 | } 62 | .pagination-load { 63 | background: url('images/pagination_icons.png') no-repeat -64px center; 64 | } 65 | .pagination-loading { 66 | background: url('images/loading.gif') no-repeat center center; 67 | } 68 | .pagination-page-list, 69 | .pagination .pagination-num { 70 | border-color: #95B8E7; 71 | } 72 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/panel.css: -------------------------------------------------------------------------------- 1 | .panel { 2 | overflow: hidden; 3 | text-align: left; 4 | margin: 0; 5 | border: 0; 6 | -moz-border-radius: 0 0 0 0; 7 | -webkit-border-radius: 0 0 0 0; 8 | border-radius: 0 0 0 0; 9 | } 10 | .panel-header, 11 | .panel-body { 12 | border-width: 1px; 13 | border-style: solid; 14 | } 15 | .panel-header { 16 | padding: 5px; 17 | position: relative; 18 | } 19 | .panel-title { 20 | background: url('images/blank.gif') no-repeat; 21 | } 22 | .panel-header-noborder { 23 | border-width: 0 0 1px 0; 24 | } 25 | .panel-body { 26 | overflow: auto; 27 | border-top-width: 0; 28 | padding: 0; 29 | } 30 | .panel-body-noheader { 31 | border-top-width: 1px; 32 | } 33 | .panel-body-noborder { 34 | border-width: 0px; 35 | } 36 | .panel-body-nobottom { 37 | border-bottom-width: 0; 38 | } 39 | .panel-with-icon { 40 | padding-left: 18px; 41 | } 42 | .panel-icon, 43 | .panel-tool { 44 | position: absolute; 45 | top: 50%; 46 | margin-top: -8px; 47 | height: 16px; 48 | overflow: hidden; 49 | } 50 | .panel-icon { 51 | left: 5px; 52 | width: 16px; 53 | } 54 | .panel-tool { 55 | right: 5px; 56 | width: auto; 57 | } 58 | .panel-tool a { 59 | display: inline-block; 60 | width: 16px; 61 | height: 16px; 62 | opacity: 0.6; 63 | filter: alpha(opacity=60); 64 | margin: 0 0 0 2px; 65 | vertical-align: top; 66 | } 67 | .panel-tool a:hover { 68 | opacity: 1; 69 | filter: alpha(opacity=100); 70 | background-color: #eaf2ff; 71 | -moz-border-radius: 3px 3px 3px 3px; 72 | -webkit-border-radius: 3px 3px 3px 3px; 73 | border-radius: 3px 3px 3px 3px; 74 | } 75 | .panel-loading { 76 | padding: 11px 0px 10px 30px; 77 | } 78 | .panel-noscroll { 79 | overflow: hidden; 80 | } 81 | .panel-fit, 82 | .panel-fit body { 83 | height: 100%; 84 | margin: 0; 85 | padding: 0; 86 | border: 0; 87 | overflow: hidden; 88 | } 89 | .panel-loading { 90 | background: url('images/loading.gif') no-repeat 10px 10px; 91 | } 92 | .panel-tool-close { 93 | background: url('images/panel_tools.png') no-repeat -16px 0px; 94 | } 95 | .panel-tool-min { 96 | background: url('images/panel_tools.png') no-repeat 0px 0px; 97 | } 98 | .panel-tool-max { 99 | background: url('images/panel_tools.png') no-repeat 0px -16px; 100 | } 101 | .panel-tool-restore { 102 | background: url('images/panel_tools.png') no-repeat -16px -16px; 103 | } 104 | .panel-tool-collapse { 105 | background: url('images/panel_tools.png') no-repeat -32px 0; 106 | } 107 | .panel-tool-expand { 108 | background: url('images/panel_tools.png') no-repeat -32px -16px; 109 | } 110 | .panel-header, 111 | .panel-body { 112 | border-color: #95B8E7; 113 | } 114 | .panel-header { 115 | background-color: #E0ECFF; 116 | background: -webkit-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); 117 | background: -moz-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); 118 | background: -o-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); 119 | background: linear-gradient(to bottom,#EFF5FF 0,#E0ECFF 100%); 120 | background-repeat: repeat-x; 121 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#E0ECFF,GradientType=0); 122 | } 123 | .panel-body { 124 | background-color: #ffffff; 125 | color: #000000; 126 | font-size: 12px; 127 | } 128 | .panel-title { 129 | font-size: 12px; 130 | font-weight: bold; 131 | color: #0E2D5F; 132 | height: 16px; 133 | line-height: 16px; 134 | } 135 | .panel-footer { 136 | border: 1px solid #95B8E7; 137 | overflow: hidden; 138 | background: #F4F4F4; 139 | } 140 | .panel-footer-noborder { 141 | border-width: 1px 0 0 0; 142 | } 143 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/progressbar.css: -------------------------------------------------------------------------------- 1 | .progressbar { 2 | border-width: 1px; 3 | border-style: solid; 4 | -moz-border-radius: 5px 5px 5px 5px; 5 | -webkit-border-radius: 5px 5px 5px 5px; 6 | border-radius: 5px 5px 5px 5px; 7 | overflow: hidden; 8 | position: relative; 9 | } 10 | .progressbar-text { 11 | text-align: center; 12 | position: absolute; 13 | } 14 | .progressbar-value { 15 | position: relative; 16 | overflow: hidden; 17 | width: 0; 18 | -moz-border-radius: 5px 0 0 5px; 19 | -webkit-border-radius: 5px 0 0 5px; 20 | border-radius: 5px 0 0 5px; 21 | } 22 | .progressbar { 23 | border-color: #95B8E7; 24 | } 25 | .progressbar-text { 26 | color: #000000; 27 | font-size: 12px; 28 | } 29 | .progressbar-value .progressbar-text { 30 | background-color: #ffe48d; 31 | color: #000000; 32 | } 33 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/propertygrid.css: -------------------------------------------------------------------------------- 1 | .propertygrid .datagrid-view1 .datagrid-body td { 2 | padding-bottom: 1px; 3 | border-width: 0 1px 0 0; 4 | } 5 | .propertygrid .datagrid-group { 6 | height: 21px; 7 | overflow: hidden; 8 | border-width: 0 0 1px 0; 9 | border-style: solid; 10 | } 11 | .propertygrid .datagrid-group span { 12 | font-weight: bold; 13 | } 14 | .propertygrid .datagrid-view1 .datagrid-body td { 15 | border-color: #dddddd; 16 | } 17 | .propertygrid .datagrid-view1 .datagrid-group { 18 | border-color: #E0ECFF; 19 | } 20 | .propertygrid .datagrid-view2 .datagrid-group { 21 | border-color: #dddddd; 22 | } 23 | .propertygrid .datagrid-group, 24 | .propertygrid .datagrid-view1 .datagrid-body, 25 | .propertygrid .datagrid-view1 .datagrid-row-over, 26 | .propertygrid .datagrid-view1 .datagrid-row-selected { 27 | background: #E0ECFF; 28 | } 29 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/searchbox.css: -------------------------------------------------------------------------------- 1 | .searchbox { 2 | display: inline-block; 3 | white-space: nowrap; 4 | margin: 0; 5 | padding: 0; 6 | border-width: 1px; 7 | border-style: solid; 8 | overflow: hidden; 9 | vertical-align: middle; 10 | } 11 | .searchbox .searchbox-text { 12 | font-size: 12px; 13 | border: 0; 14 | margin: 0; 15 | padding: 0 2px; 16 | vertical-align: top; 17 | } 18 | .searchbox .searchbox-prompt { 19 | font-size: 12px; 20 | color: #ccc; 21 | } 22 | .searchbox-button { 23 | width: 18px; 24 | height: 20px; 25 | overflow: hidden; 26 | display: inline-block; 27 | vertical-align: top; 28 | cursor: pointer; 29 | opacity: 0.6; 30 | filter: alpha(opacity=60); 31 | } 32 | .searchbox-button-hover { 33 | opacity: 1.0; 34 | filter: alpha(opacity=100); 35 | } 36 | .searchbox .l-btn-plain { 37 | border: 0; 38 | padding: 0; 39 | vertical-align: top; 40 | opacity: 0.6; 41 | filter: alpha(opacity=60); 42 | -moz-border-radius: 0 0 0 0; 43 | -webkit-border-radius: 0 0 0 0; 44 | border-radius: 0 0 0 0; 45 | } 46 | .searchbox .l-btn-plain:hover { 47 | border: 0; 48 | padding: 0; 49 | opacity: 1.0; 50 | filter: alpha(opacity=100); 51 | -moz-border-radius: 0 0 0 0; 52 | -webkit-border-radius: 0 0 0 0; 53 | border-radius: 0 0 0 0; 54 | } 55 | .searchbox a.m-btn-plain-active { 56 | -moz-border-radius: 0 0 0 0; 57 | -webkit-border-radius: 0 0 0 0; 58 | border-radius: 0 0 0 0; 59 | } 60 | .searchbox .m-btn-active { 61 | border-width: 0 1px 0 0; 62 | -moz-border-radius: 0 0 0 0; 63 | -webkit-border-radius: 0 0 0 0; 64 | border-radius: 0 0 0 0; 65 | } 66 | .searchbox .textbox-button-right { 67 | border-width: 0 0 0 1px; 68 | } 69 | .searchbox .textbox-button-left { 70 | border-width: 0 1px 0 0; 71 | } 72 | .searchbox-button { 73 | background: url('images/searchbox_button.png') no-repeat center center; 74 | } 75 | .searchbox { 76 | border-color: #95B8E7; 77 | background-color: #fff; 78 | } 79 | .searchbox .l-btn-plain { 80 | background: #E0ECFF; 81 | } 82 | .searchbox .l-btn-plain-disabled, 83 | .searchbox .l-btn-plain-disabled:hover { 84 | opacity: 0.5; 85 | filter: alpha(opacity=50); 86 | } 87 | .textbox-invalid { 88 | border-color: #ffa8a8; 89 | background-color: #fff3f3; 90 | } 91 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/slider.css: -------------------------------------------------------------------------------- 1 | .slider-disabled { 2 | opacity: 0.5; 3 | filter: alpha(opacity=50); 4 | } 5 | .slider-h { 6 | height: 22px; 7 | } 8 | .slider-v { 9 | width: 22px; 10 | } 11 | .slider-inner { 12 | position: relative; 13 | height: 6px; 14 | top: 7px; 15 | border-width: 1px; 16 | border-style: solid; 17 | border-radius: 5px; 18 | } 19 | .slider-handle { 20 | position: absolute; 21 | display: block; 22 | outline: none; 23 | width: 20px; 24 | height: 20px; 25 | top: 50%; 26 | margin-top: -10px; 27 | margin-left: -10px; 28 | } 29 | .slider-tip { 30 | position: absolute; 31 | display: inline-block; 32 | line-height: 12px; 33 | font-size: 12px; 34 | white-space: nowrap; 35 | top: -22px; 36 | } 37 | .slider-rule { 38 | position: relative; 39 | top: 15px; 40 | } 41 | .slider-rule span { 42 | position: absolute; 43 | display: inline-block; 44 | font-size: 0; 45 | height: 5px; 46 | border-width: 0 0 0 1px; 47 | border-style: solid; 48 | } 49 | .slider-rulelabel { 50 | position: relative; 51 | top: 20px; 52 | } 53 | .slider-rulelabel span { 54 | position: absolute; 55 | display: inline-block; 56 | font-size: 12px; 57 | } 58 | .slider-v .slider-inner { 59 | width: 6px; 60 | left: 7px; 61 | top: 0; 62 | float: left; 63 | } 64 | .slider-v .slider-handle { 65 | left: 50%; 66 | margin-top: -10px; 67 | } 68 | .slider-v .slider-tip { 69 | left: -10px; 70 | margin-top: -6px; 71 | } 72 | .slider-v .slider-rule { 73 | float: left; 74 | top: 0; 75 | left: 16px; 76 | } 77 | .slider-v .slider-rule span { 78 | width: 5px; 79 | height: 'auto'; 80 | border-left: 0; 81 | border-width: 1px 0 0 0; 82 | border-style: solid; 83 | } 84 | .slider-v .slider-rulelabel { 85 | float: left; 86 | top: 0; 87 | left: 23px; 88 | } 89 | .slider-handle { 90 | background: url('images/slider_handle.png') no-repeat; 91 | } 92 | .slider-inner { 93 | border-color: #95B8E7; 94 | background: #E0ECFF; 95 | } 96 | .slider-rule span { 97 | border-color: #95B8E7; 98 | } 99 | .slider-rulelabel span { 100 | color: #000000; 101 | } 102 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/spinner.css: -------------------------------------------------------------------------------- 1 | .spinner { 2 | display: inline-block; 3 | white-space: nowrap; 4 | margin: 0; 5 | padding: 0; 6 | border-width: 1px; 7 | border-style: solid; 8 | overflow: hidden; 9 | vertical-align: middle; 10 | } 11 | .spinner .spinner-text { 12 | font-size: 12px; 13 | border: 0px; 14 | margin: 0; 15 | padding: 0 2px; 16 | vertical-align: baseline; 17 | } 18 | .spinner-arrow { 19 | background-color: #E0ECFF; 20 | display: inline-block; 21 | overflow: hidden; 22 | vertical-align: top; 23 | margin: 0; 24 | padding: 0; 25 | opacity: 1.0; 26 | filter: alpha(opacity=100); 27 | width: 18px; 28 | } 29 | .spinner-arrow-up, 30 | .spinner-arrow-down { 31 | opacity: 0.6; 32 | filter: alpha(opacity=60); 33 | display: block; 34 | font-size: 1px; 35 | width: 18px; 36 | height: 10px; 37 | width: 100%; 38 | height: 50%; 39 | color: #444; 40 | outline-style: none; 41 | } 42 | .spinner-arrow-hover { 43 | background-color: #eaf2ff; 44 | opacity: 1.0; 45 | filter: alpha(opacity=100); 46 | } 47 | .spinner-arrow-up:hover, 48 | .spinner-arrow-down:hover { 49 | opacity: 1.0; 50 | filter: alpha(opacity=100); 51 | background-color: #eaf2ff; 52 | } 53 | .textbox-icon-disabled .spinner-arrow-up:hover, 54 | .textbox-icon-disabled .spinner-arrow-down:hover { 55 | opacity: 0.6; 56 | filter: alpha(opacity=60); 57 | background-color: #E0ECFF; 58 | cursor: default; 59 | } 60 | .spinner .textbox-icon-disabled { 61 | opacity: 0.6; 62 | filter: alpha(opacity=60); 63 | } 64 | .spinner-arrow-up { 65 | background: url('images/spinner_arrows.png') no-repeat 1px center; 66 | } 67 | .spinner-arrow-down { 68 | background: url('images/spinner_arrows.png') no-repeat -15px center; 69 | } 70 | .spinner { 71 | border-color: #95B8E7; 72 | } 73 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/splitbutton.css: -------------------------------------------------------------------------------- 1 | .s-btn:hover .m-btn-line, 2 | .s-btn-active .m-btn-line, 3 | .s-btn-plain-active .m-btn-line { 4 | display: inline-block; 5 | } 6 | .l-btn:hover .s-btn-downarrow, 7 | .s-btn-active .s-btn-downarrow, 8 | .s-btn-plain-active .s-btn-downarrow { 9 | border-style: solid; 10 | border-color: #aac5e7; 11 | border-width: 0 0 0 1px; 12 | } 13 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/textbox.css: -------------------------------------------------------------------------------- 1 | .textbox { 2 | position: relative; 3 | border: 1px solid #95B8E7; 4 | background-color: #fff; 5 | vertical-align: middle; 6 | display: inline-block; 7 | overflow: hidden; 8 | white-space: nowrap; 9 | margin: 0; 10 | padding: 0; 11 | -moz-border-radius: 5px 5px 5px 5px; 12 | -webkit-border-radius: 5px 5px 5px 5px; 13 | border-radius: 5px 5px 5px 5px; 14 | } 15 | .textbox .textbox-text { 16 | font-size: 12px; 17 | border: 0; 18 | margin: 0; 19 | padding: 4px; 20 | white-space: normal; 21 | vertical-align: top; 22 | outline-style: none; 23 | resize: none; 24 | -moz-border-radius: 5px 5px 5px 5px; 25 | -webkit-border-radius: 5px 5px 5px 5px; 26 | border-radius: 5px 5px 5px 5px; 27 | } 28 | .textbox .textbox-prompt { 29 | font-size: 12px; 30 | color: #aaa; 31 | } 32 | .textbox .textbox-button, 33 | .textbox .textbox-button:hover { 34 | position: absolute; 35 | top: 0; 36 | padding: 0; 37 | vertical-align: top; 38 | -moz-border-radius: 0 0 0 0; 39 | -webkit-border-radius: 0 0 0 0; 40 | border-radius: 0 0 0 0; 41 | } 42 | .textbox-button-right, 43 | .textbox-button-right:hover { 44 | border-width: 0 0 0 1px; 45 | } 46 | .textbox-button-left, 47 | .textbox-button-left:hover { 48 | border-width: 0 1px 0 0; 49 | } 50 | .textbox-addon { 51 | position: absolute; 52 | top: 0; 53 | } 54 | .textbox-icon { 55 | display: inline-block; 56 | width: 18px; 57 | height: 20px; 58 | overflow: hidden; 59 | vertical-align: top; 60 | background-position: center center; 61 | cursor: pointer; 62 | opacity: 0.6; 63 | filter: alpha(opacity=60); 64 | text-decoration: none; 65 | outline-style: none; 66 | } 67 | .textbox-icon-disabled, 68 | .textbox-icon-readonly { 69 | cursor: default; 70 | } 71 | .textbox-icon:hover { 72 | opacity: 1.0; 73 | filter: alpha(opacity=100); 74 | } 75 | .textbox-icon-disabled:hover { 76 | opacity: 0.6; 77 | filter: alpha(opacity=60); 78 | } 79 | .textbox-focused { 80 | -moz-box-shadow: 0 0 3px 0 #95B8E7; 81 | -webkit-box-shadow: 0 0 3px 0 #95B8E7; 82 | box-shadow: 0 0 3px 0 #95B8E7; 83 | } 84 | .textbox-invalid { 85 | border-color: #ffa8a8; 86 | background-color: #fff3f3; 87 | } 88 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/tooltip.css: -------------------------------------------------------------------------------- 1 | .tooltip { 2 | position: absolute; 3 | display: none; 4 | z-index: 9900000; 5 | outline: none; 6 | opacity: 1; 7 | filter: alpha(opacity=100); 8 | padding: 5px; 9 | border-width: 1px; 10 | border-style: solid; 11 | border-radius: 5px; 12 | -moz-border-radius: 5px 5px 5px 5px; 13 | -webkit-border-radius: 5px 5px 5px 5px; 14 | border-radius: 5px 5px 5px 5px; 15 | } 16 | .tooltip-content { 17 | font-size: 12px; 18 | } 19 | .tooltip-arrow-outer, 20 | .tooltip-arrow { 21 | position: absolute; 22 | width: 0; 23 | height: 0; 24 | line-height: 0; 25 | font-size: 0; 26 | border-style: solid; 27 | border-width: 6px; 28 | border-color: transparent; 29 | _border-color: tomato; 30 | _filter: chroma(color=tomato); 31 | } 32 | .tooltip-right .tooltip-arrow-outer { 33 | left: 0; 34 | top: 50%; 35 | margin: -6px 0 0 -13px; 36 | } 37 | .tooltip-right .tooltip-arrow { 38 | left: 0; 39 | top: 50%; 40 | margin: -6px 0 0 -12px; 41 | } 42 | .tooltip-left .tooltip-arrow-outer { 43 | right: 0; 44 | top: 50%; 45 | margin: -6px -13px 0 0; 46 | } 47 | .tooltip-left .tooltip-arrow { 48 | right: 0; 49 | top: 50%; 50 | margin: -6px -12px 0 0; 51 | } 52 | .tooltip-top .tooltip-arrow-outer { 53 | bottom: 0; 54 | left: 50%; 55 | margin: 0 0 -13px -6px; 56 | } 57 | .tooltip-top .tooltip-arrow { 58 | bottom: 0; 59 | left: 50%; 60 | margin: 0 0 -12px -6px; 61 | } 62 | .tooltip-bottom .tooltip-arrow-outer { 63 | top: 0; 64 | left: 50%; 65 | margin: -13px 0 0 -6px; 66 | } 67 | .tooltip-bottom .tooltip-arrow { 68 | top: 0; 69 | left: 50%; 70 | margin: -12px 0 0 -6px; 71 | } 72 | .tooltip { 73 | background-color: #ffffff; 74 | border-color: #95B8E7; 75 | color: #000000; 76 | } 77 | .tooltip-right .tooltip-arrow-outer { 78 | border-right-color: #95B8E7; 79 | } 80 | .tooltip-right .tooltip-arrow { 81 | border-right-color: #ffffff; 82 | } 83 | .tooltip-left .tooltip-arrow-outer { 84 | border-left-color: #95B8E7; 85 | } 86 | .tooltip-left .tooltip-arrow { 87 | border-left-color: #ffffff; 88 | } 89 | .tooltip-top .tooltip-arrow-outer { 90 | border-top-color: #95B8E7; 91 | } 92 | .tooltip-top .tooltip-arrow { 93 | border-top-color: #ffffff; 94 | } 95 | .tooltip-bottom .tooltip-arrow-outer { 96 | border-bottom-color: #95B8E7; 97 | } 98 | .tooltip-bottom .tooltip-arrow { 99 | border-bottom-color: #ffffff; 100 | } 101 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/tree.css: -------------------------------------------------------------------------------- 1 | .tree { 2 | margin: 0; 3 | padding: 0; 4 | list-style-type: none; 5 | } 6 | .tree li { 7 | white-space: nowrap; 8 | } 9 | .tree li ul { 10 | list-style-type: none; 11 | margin: 0; 12 | padding: 0; 13 | } 14 | .tree-node { 15 | height: 18px; 16 | white-space: nowrap; 17 | cursor: pointer; 18 | } 19 | .tree-hit { 20 | cursor: pointer; 21 | } 22 | .tree-expanded, 23 | .tree-collapsed, 24 | .tree-folder, 25 | .tree-file, 26 | .tree-checkbox, 27 | .tree-indent { 28 | display: inline-block; 29 | width: 16px; 30 | height: 18px; 31 | vertical-align: top; 32 | overflow: hidden; 33 | } 34 | .tree-expanded { 35 | background: url('images/tree_icons.png') no-repeat -18px 0px; 36 | } 37 | .tree-expanded-hover { 38 | background: url('images/tree_icons.png') no-repeat -50px 0px; 39 | } 40 | .tree-collapsed { 41 | background: url('images/tree_icons.png') no-repeat 0px 0px; 42 | } 43 | .tree-collapsed-hover { 44 | background: url('images/tree_icons.png') no-repeat -32px 0px; 45 | } 46 | .tree-lines .tree-expanded, 47 | .tree-lines .tree-root-first .tree-expanded { 48 | background: url('images/tree_icons.png') no-repeat -144px 0; 49 | } 50 | .tree-lines .tree-collapsed, 51 | .tree-lines .tree-root-first .tree-collapsed { 52 | background: url('images/tree_icons.png') no-repeat -128px 0; 53 | } 54 | .tree-lines .tree-node-last .tree-expanded, 55 | .tree-lines .tree-root-one .tree-expanded { 56 | background: url('images/tree_icons.png') no-repeat -80px 0; 57 | } 58 | .tree-lines .tree-node-last .tree-collapsed, 59 | .tree-lines .tree-root-one .tree-collapsed { 60 | background: url('images/tree_icons.png') no-repeat -64px 0; 61 | } 62 | .tree-line { 63 | background: url('images/tree_icons.png') no-repeat -176px 0; 64 | } 65 | .tree-join { 66 | background: url('images/tree_icons.png') no-repeat -192px 0; 67 | } 68 | .tree-joinbottom { 69 | background: url('images/tree_icons.png') no-repeat -160px 0; 70 | } 71 | .tree-folder { 72 | background: url('images/tree_icons.png') no-repeat -208px 0; 73 | } 74 | .tree-folder-open { 75 | background: url('images/tree_icons.png') no-repeat -224px 0; 76 | } 77 | .tree-file { 78 | background: url('images/tree_icons.png') no-repeat -240px 0; 79 | } 80 | .tree-loading { 81 | background: url('images/loading.gif') no-repeat center center; 82 | } 83 | .tree-checkbox0 { 84 | background: url('images/tree_icons.png') no-repeat -208px -18px; 85 | } 86 | .tree-checkbox1 { 87 | background: url('images/tree_icons.png') no-repeat -224px -18px; 88 | } 89 | .tree-checkbox2 { 90 | background: url('images/tree_icons.png') no-repeat -240px -18px; 91 | } 92 | .tree-title { 93 | font-size: 12px; 94 | display: inline-block; 95 | text-decoration: none; 96 | vertical-align: top; 97 | white-space: nowrap; 98 | padding: 0 2px; 99 | height: 18px; 100 | line-height: 18px; 101 | } 102 | .tree-node-proxy { 103 | font-size: 12px; 104 | line-height: 20px; 105 | padding: 0 2px 0 20px; 106 | border-width: 1px; 107 | border-style: solid; 108 | z-index: 9900000; 109 | } 110 | .tree-dnd-icon { 111 | display: inline-block; 112 | position: absolute; 113 | width: 16px; 114 | height: 18px; 115 | left: 2px; 116 | top: 50%; 117 | margin-top: -9px; 118 | } 119 | .tree-dnd-yes { 120 | background: url('images/tree_icons.png') no-repeat -256px 0; 121 | } 122 | .tree-dnd-no { 123 | background: url('images/tree_icons.png') no-repeat -256px -18px; 124 | } 125 | .tree-node-top { 126 | border-top: 1px dotted red; 127 | } 128 | .tree-node-bottom { 129 | border-bottom: 1px dotted red; 130 | } 131 | .tree-node-append .tree-title { 132 | border: 1px dotted red; 133 | } 134 | .tree-editor { 135 | border: 1px solid #ccc; 136 | font-size: 12px; 137 | height: 14px !important; 138 | height: 18px; 139 | line-height: 14px; 140 | padding: 1px 2px; 141 | width: 80px; 142 | position: absolute; 143 | top: 0; 144 | } 145 | .tree-node-proxy { 146 | background-color: #ffffff; 147 | color: #000000; 148 | border-color: #95B8E7; 149 | } 150 | .tree-node-hover { 151 | background: #eaf2ff; 152 | color: #000000; 153 | } 154 | .tree-node-selected { 155 | background: #ffe48d; 156 | color: #000000; 157 | } 158 | .tree-node-hidden { 159 | display: none; 160 | } 161 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/validatebox.css: -------------------------------------------------------------------------------- 1 | .validatebox-invalid { 2 | border-color: #ffa8a8; 3 | background-color: #fff3f3; 4 | color: #000; 5 | } 6 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/default/window.css: -------------------------------------------------------------------------------- 1 | .window { 2 | overflow: hidden; 3 | padding: 5px; 4 | border-width: 1px; 5 | border-style: solid; 6 | } 7 | .window .window-header { 8 | background: transparent; 9 | padding: 0px 0px 6px 0px; 10 | } 11 | .window .window-body { 12 | border-width: 1px; 13 | border-style: solid; 14 | border-top-width: 0px; 15 | } 16 | .window .window-body-noheader { 17 | border-top-width: 1px; 18 | } 19 | .window .panel-body-nobottom { 20 | border-bottom-width: 0; 21 | } 22 | .window .window-header .panel-icon, 23 | .window .window-header .panel-tool { 24 | top: 50%; 25 | margin-top: -11px; 26 | } 27 | .window .window-header .panel-icon { 28 | left: 1px; 29 | } 30 | .window .window-header .panel-tool { 31 | right: 1px; 32 | } 33 | .window .window-header .panel-with-icon { 34 | padding-left: 18px; 35 | } 36 | .window-proxy { 37 | position: absolute; 38 | overflow: hidden; 39 | } 40 | .window-proxy-mask { 41 | position: absolute; 42 | filter: alpha(opacity=5); 43 | opacity: 0.05; 44 | } 45 | .window-mask { 46 | position: absolute; 47 | left: 0; 48 | top: 0; 49 | width: 100%; 50 | height: 100%; 51 | filter: alpha(opacity=40); 52 | opacity: 0.40; 53 | font-size: 1px; 54 | overflow: hidden; 55 | } 56 | .window, 57 | .window-shadow { 58 | position: absolute; 59 | -moz-border-radius: 5px 5px 5px 5px; 60 | -webkit-border-radius: 5px 5px 5px 5px; 61 | border-radius: 5px 5px 5px 5px; 62 | } 63 | .window-shadow { 64 | background: #ccc; 65 | -moz-box-shadow: 2px 2px 3px #cccccc; 66 | -webkit-box-shadow: 2px 2px 3px #cccccc; 67 | box-shadow: 2px 2px 3px #cccccc; 68 | filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); 69 | } 70 | .window, 71 | .window .window-body { 72 | border-color: #95B8E7; 73 | } 74 | .window { 75 | background-color: #E0ECFF; 76 | background: -webkit-linear-gradient(top,#EFF5FF 0,#E0ECFF 20%); 77 | background: -moz-linear-gradient(top,#EFF5FF 0,#E0ECFF 20%); 78 | background: -o-linear-gradient(top,#EFF5FF 0,#E0ECFF 20%); 79 | background: linear-gradient(to bottom,#EFF5FF 0,#E0ECFF 20%); 80 | background-repeat: repeat-x; 81 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#E0ECFF,GradientType=0); 82 | } 83 | .window-proxy { 84 | border: 1px dashed #95B8E7; 85 | } 86 | .window-proxy-mask, 87 | .window-mask { 88 | background: #ccc; 89 | } 90 | .window .panel-footer { 91 | border: 1px solid #95B8E7; 92 | position: relative; 93 | top: -1px; 94 | } 95 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/add.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/asterisk_orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/asterisk_orange.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/back.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/basket_remove.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/basket_remove.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/blank.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/blank.gif -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/book_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/book_add.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/book_open_mark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/book_open_mark.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/book_previous.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/book_previous.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/cancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/cancel.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/chart_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/chart_bar.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/class.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/class.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/clear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/clear.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/cut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/cut.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/door_out.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/door_out.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/edit_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/edit_add.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/edit_remove.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/edit_remove.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/error.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/filesave.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/filesave.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/filter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/filter.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/find.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/find.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/folder_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/folder_up.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/heart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/heart.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/help.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/house.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/house.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/info.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/large_chart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/large_chart.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/large_clipart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/large_clipart.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/large_picture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/large_picture.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/large_shapes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/large_shapes.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/large_smartart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/large_smartart.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/lock.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/man.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/man.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/mini_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/mini_add.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/mini_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/mini_edit.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/mini_refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/mini_refresh.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/more.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/no.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/no.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/note.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/note.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/note_pen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/note_pen.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/ok.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/ok.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/password_lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/password_lock.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/pencil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/pencil.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/pencil_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/pencil_add.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/print.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/print.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/redo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/redo.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/reload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/reload.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/search.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/set.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/set.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/sum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/sum.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/teacher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/teacher.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/text_list_bullets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/text_list_bullets.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/text_list_numbers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/text_list_numbers.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/tip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/tip.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/undo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/undo.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/user_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/user_add.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/user_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/user_gray.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/user_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/user_red.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/vcard_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/vcard_edit.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/world.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/world.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/world_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/world_add.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/world_night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/world_night.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/zoom_in.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/icons/zoom_in.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/locale/easyui-lang-zh_CN.js: -------------------------------------------------------------------------------- 1 | if ($.fn.pagination) { 2 | $.fn.pagination.defaults.beforePageText = '第'; 3 | $.fn.pagination.defaults.afterPageText = '共{pages}页'; 4 | $.fn.pagination.defaults.displayMsg = '显示{from}到{to},共{total}记录'; 5 | } 6 | if ($.fn.datagrid) { 7 | $.fn.datagrid.defaults.loadMsg = '正在处理,请稍待。。。'; 8 | } 9 | if ($.fn.treegrid && $.fn.datagrid) { 10 | $.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg; 11 | } 12 | if ($.messager) { 13 | $.messager.defaults.ok = '确定'; 14 | $.messager.defaults.cancel = '取消'; 15 | } 16 | $.map(['validatebox', 'textbox', 'filebox', 'searchbox', 17 | 'combo', 'combobox', 'combogrid', 'combotree', 18 | 'datebox', 'datetimebox', 'numberbox', 19 | 'spinner', 'numberspinner', 'timespinner', 'datetimespinner'], function (plugin) { 20 | if ($.fn[plugin]) { 21 | $.fn[plugin].defaults.missingMessage = '该输入项为必输项'; 22 | } 23 | }); 24 | if ($.fn.validatebox) { 25 | $.fn.validatebox.defaults.rules.email.message = '请输入有效的电子邮件地址'; 26 | $.fn.validatebox.defaults.rules.url.message = '请输入有效的URL地址'; 27 | $.fn.validatebox.defaults.rules.length.message = '输入内容长度必须介于{0}和{1}之间'; 28 | $.fn.validatebox.defaults.rules.remote.message = '请修正该字段'; 29 | } 30 | if ($.fn.calendar) { 31 | $.fn.calendar.defaults.weeks = ['日', '一', '二', '三', '四', '五', '六']; 32 | $.fn.calendar.defaults.months = ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']; 33 | } 34 | if ($.fn.datebox) { 35 | $.fn.datebox.defaults.currentText = '今天'; 36 | $.fn.datebox.defaults.closeText = '关闭'; 37 | $.fn.datebox.defaults.okText = '确定'; 38 | $.fn.datebox.defaults.formatter = function (date) { 39 | var y = date.getFullYear(); 40 | var m = date.getMonth() + 1; 41 | var d = date.getDate(); 42 | return y + '-' + (m < 10 ? ('0' + m) : m) + '-' + (d < 10 ? ('0' + d) : d); 43 | }; 44 | $.fn.datebox.defaults.parser = function (s) { 45 | if (!s) return new Date(); 46 | var ss = s.split('-'); 47 | var y = parseInt(ss[0], 10); 48 | var m = parseInt(ss[1], 10); 49 | var d = parseInt(ss[2], 10); 50 | if (!isNaN(y) && !isNaN(m) && !isNaN(d)) { 51 | return new Date(y, m - 1, d); 52 | } else { 53 | return new Date(); 54 | } 55 | }; 56 | } 57 | if ($.fn.datetimebox && $.fn.datebox) { 58 | $.extend($.fn.datetimebox.defaults, { 59 | currentText: $.fn.datebox.defaults.currentText, 60 | closeText: $.fn.datebox.defaults.closeText, 61 | okText: $.fn.datebox.defaults.okText 62 | }); 63 | } 64 | if ($.fn.datetimespinner) { 65 | $.fn.datetimespinner.defaults.selections = [[0, 4], [5, 7], [8, 10], [11, 13], [14, 16], [17, 19]] 66 | } -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/accordion.css: -------------------------------------------------------------------------------- 1 | .accordion { 2 | overflow: hidden; 3 | border-width: 1px; 4 | border-style: solid; 5 | } 6 | .accordion .accordion-header { 7 | border-width: 0 0 1px; 8 | cursor: pointer; 9 | } 10 | .accordion .accordion-body { 11 | border-width: 0 0 1px; 12 | } 13 | .accordion-noborder { 14 | border-width: 0; 15 | } 16 | .accordion-noborder .accordion-header { 17 | border-width: 0 0 1px; 18 | } 19 | .accordion-noborder .accordion-body { 20 | border-width: 0 0 1px; 21 | } 22 | .accordion-collapse { 23 | background: url('images/accordion_arrows.png') no-repeat 0 0; 24 | } 25 | .accordion-expand { 26 | background: url('images/accordion_arrows.png') no-repeat -16px 0; 27 | } 28 | .accordion { 29 | background: #fff; 30 | border-color: #ddd; 31 | } 32 | .accordion .accordion-header { 33 | background: #ffffff; 34 | filter: none; 35 | } 36 | .accordion .accordion-header-selected { 37 | background: #CCE6FF; 38 | } 39 | .accordion .accordion-header-selected .panel-title { 40 | color: #000; 41 | } 42 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/combo.css: -------------------------------------------------------------------------------- 1 | .combo-arrow { 2 | width: 18px; 3 | height: 20px; 4 | overflow: hidden; 5 | display: inline-block; 6 | vertical-align: top; 7 | cursor: pointer; 8 | opacity: 0.6; 9 | filter: alpha(opacity=60); 10 | } 11 | .combo-arrow-hover { 12 | opacity: 1.0; 13 | filter: alpha(opacity=100); 14 | } 15 | .combo-panel { 16 | overflow: auto; 17 | } 18 | .combo-arrow { 19 | background: url('images/combo_arrow.png') no-repeat center center; 20 | } 21 | .combo-panel { 22 | background-color: #fff; 23 | } 24 | .combo-arrow { 25 | background-color: #ffffff; 26 | } 27 | .combo-arrow-hover { 28 | background-color: #E6E6E6; 29 | } 30 | .combo-arrow:hover { 31 | background-color: #E6E6E6; 32 | } 33 | .combo .textbox-icon-disabled:hover { 34 | cursor: default; 35 | } 36 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/combobox.css: -------------------------------------------------------------------------------- 1 | .combobox-item, 2 | .combobox-group, 3 | .combobox-stick { 4 | font-size: 12px; 5 | padding: 3px; 6 | } 7 | .combobox-item-disabled { 8 | opacity: 0.5; 9 | filter: alpha(opacity=50); 10 | } 11 | .combobox-gitem { 12 | padding-left: 10px; 13 | } 14 | .combobox-group, 15 | .combobox-stick { 16 | font-weight: bold; 17 | } 18 | .combobox-stick { 19 | position: absolute; 20 | top: 1px; 21 | left: 1px; 22 | right: 1px; 23 | background: inherit; 24 | } 25 | .combobox-item-hover { 26 | background-color: #E6E6E6; 27 | color: #444; 28 | } 29 | .combobox-item-selected { 30 | background-color: #CCE6FF; 31 | color: #000; 32 | } 33 | .combobox-icon { 34 | display: inline-block; 35 | width: 16px; 36 | height: 16px; 37 | vertical-align: middle; 38 | margin-right: 2px; 39 | } 40 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/datalist.css: -------------------------------------------------------------------------------- 1 | .datalist .datagrid-header { 2 | border-width: 0; 3 | } 4 | .datalist .datagrid-group, 5 | .m-list .m-list-group { 6 | height: 25px; 7 | line-height: 25px; 8 | font-weight: bold; 9 | overflow: hidden; 10 | background-color: #ffffff; 11 | border-style: solid; 12 | border-width: 0 0 1px 0; 13 | border-color: #ddd; 14 | } 15 | .datalist .datagrid-group-expander { 16 | display: none; 17 | } 18 | .datalist .datagrid-group-title { 19 | padding: 0 4px; 20 | } 21 | .datalist .datagrid-btable { 22 | width: 100%; 23 | table-layout: fixed; 24 | } 25 | .datalist .datagrid-row td { 26 | border-style: solid; 27 | border-left-color: transparent; 28 | border-right-color: transparent; 29 | border-bottom-width: 0; 30 | } 31 | .datalist-lines .datagrid-row td { 32 | border-bottom-width: 1px; 33 | } 34 | .datalist .datagrid-cell, 35 | .m-list li { 36 | width: auto; 37 | height: auto; 38 | padding: 2px 4px; 39 | line-height: 18px; 40 | position: relative; 41 | white-space: nowrap; 42 | text-overflow: ellipsis; 43 | overflow: hidden; 44 | } 45 | .datalist-link, 46 | .m-list li>a { 47 | display: block; 48 | position: relative; 49 | cursor: pointer; 50 | color: #444; 51 | text-decoration: none; 52 | overflow: hidden; 53 | margin: -2px -4px; 54 | padding: 2px 4px; 55 | padding-right: 16px; 56 | line-height: 18px; 57 | white-space: nowrap; 58 | text-overflow: ellipsis; 59 | overflow: hidden; 60 | } 61 | .datalist-link::after, 62 | .m-list li>a::after { 63 | position: absolute; 64 | display: block; 65 | width: 8px; 66 | height: 8px; 67 | content: ''; 68 | right: 6px; 69 | top: 50%; 70 | margin-top: -4px; 71 | border-style: solid; 72 | border-width: 1px 1px 0 0; 73 | -ms-transform: rotate(45deg); 74 | -moz-transform: rotate(45deg); 75 | -webkit-transform: rotate(45deg); 76 | -o-transform: rotate(45deg); 77 | transform: rotate(45deg); 78 | } 79 | .m-list { 80 | margin: 0; 81 | padding: 0; 82 | list-style: none; 83 | } 84 | .m-list li { 85 | border-style: solid; 86 | border-width: 0 0 1px 0; 87 | border-color: #ddd; 88 | } 89 | .m-list li>a:hover { 90 | background: #E6E6E6; 91 | color: #444; 92 | } 93 | .m-list .m-list-group { 94 | padding: 0 4px; 95 | } 96 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/datebox.css: -------------------------------------------------------------------------------- 1 | .datebox-calendar-inner { 2 | height: 180px; 3 | } 4 | .datebox-button { 5 | padding: 0 5px; 6 | text-align: center; 7 | } 8 | .datebox-button a { 9 | line-height: 22px; 10 | font-size: 12px; 11 | font-weight: bold; 12 | text-decoration: none; 13 | opacity: 0.6; 14 | filter: alpha(opacity=60); 15 | } 16 | .datebox-button a:hover { 17 | opacity: 1.0; 18 | filter: alpha(opacity=100); 19 | } 20 | .datebox-current, 21 | .datebox-close { 22 | float: left; 23 | } 24 | .datebox-close { 25 | float: right; 26 | } 27 | .datebox .combo-arrow { 28 | background-image: url('images/datebox_arrow.png'); 29 | background-position: center center; 30 | } 31 | .datebox-button { 32 | background-color: #fff; 33 | } 34 | .datebox-button a { 35 | color: #777; 36 | } 37 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/dialog.css: -------------------------------------------------------------------------------- 1 | .dialog-content { 2 | overflow: auto; 3 | } 4 | .dialog-toolbar { 5 | position: relative; 6 | padding: 2px 5px; 7 | } 8 | .dialog-tool-separator { 9 | float: left; 10 | height: 24px; 11 | border-left: 1px solid #ddd; 12 | border-right: 1px solid #fff; 13 | margin: 2px 1px; 14 | } 15 | .dialog-button { 16 | position: relative; 17 | top: -1px; 18 | padding: 5px; 19 | text-align: right; 20 | } 21 | .dialog-button .l-btn { 22 | margin-left: 5px; 23 | } 24 | .dialog-toolbar, 25 | .dialog-button { 26 | background: #fff; 27 | border-width: 1px; 28 | border-style: solid; 29 | } 30 | .dialog-toolbar { 31 | border-color: #ddd #ddd #ddd #ddd; 32 | } 33 | .dialog-button { 34 | border-color: #ddd #ddd #ddd #ddd; 35 | } 36 | .window-thinborder .dialog-toolbar { 37 | border-left: transparent; 38 | border-right: transparent; 39 | border-top-color: #fff; 40 | } 41 | .window-thinborder .dialog-button { 42 | top: 0px; 43 | padding: 5px 8px 8px 8px; 44 | border-left: transparent; 45 | border-right: transparent; 46 | border-bottom: transparent; 47 | } 48 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/filebox.css: -------------------------------------------------------------------------------- 1 | .filebox .textbox-value { 2 | vertical-align: top; 3 | position: absolute; 4 | top: 0; 5 | left: -5000px; 6 | } 7 | .filebox-label { 8 | display: inline-block; 9 | position: absolute; 10 | width: 100%; 11 | height: 100%; 12 | cursor: pointer; 13 | left: 0; 14 | top: 0; 15 | z-index: 10; 16 | background: url('images/blank.gif') no-repeat; 17 | } 18 | .l-btn-disabled .filebox-label { 19 | cursor: default; 20 | } 21 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/accordion_arrows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/accordion_arrows.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/blank.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/blank.gif -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/calendar_arrows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/calendar_arrows.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/combo_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/combo_arrow.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/datagrid_icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/datagrid_icons.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/datebox_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/datebox_arrow.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/layout_arrows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/layout_arrows.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/linkbutton_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/linkbutton_bg.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/loading.gif -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/menu_arrows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/menu_arrows.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/messager_icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/messager_icons.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/pagination_icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/pagination_icons.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/panel_tools.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/panel_tools.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/searchbox_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/searchbox_button.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/slider_handle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/slider_handle.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/spinner_arrows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/spinner_arrows.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/tabs_icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/tabs_icons.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/tree_icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/tree_icons.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/validatebox_warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/images/validatebox_warning.png -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/layout.css: -------------------------------------------------------------------------------- 1 | .layout { 2 | position: relative; 3 | overflow: hidden; 4 | margin: 0; 5 | padding: 0; 6 | z-index: 0; 7 | } 8 | .layout-panel { 9 | position: absolute; 10 | overflow: hidden; 11 | } 12 | .layout-body { 13 | min-width: 1px; 14 | min-height: 1px; 15 | } 16 | .layout-panel-east, 17 | .layout-panel-west { 18 | z-index: 2; 19 | } 20 | .layout-panel-north, 21 | .layout-panel-south { 22 | z-index: 3; 23 | } 24 | .layout-expand { 25 | position: absolute; 26 | padding: 0px; 27 | font-size: 1px; 28 | cursor: pointer; 29 | z-index: 1; 30 | } 31 | .layout-expand .panel-header, 32 | .layout-expand .panel-body { 33 | background: transparent; 34 | filter: none; 35 | overflow: hidden; 36 | } 37 | .layout-expand .panel-header { 38 | border-bottom-width: 0px; 39 | } 40 | .layout-expand .panel-body { 41 | position: relative; 42 | } 43 | .layout-expand .panel-body .panel-icon { 44 | margin-top: 0; 45 | top: 0; 46 | left: 50%; 47 | margin-left: -8px; 48 | } 49 | .layout-expand-west .panel-header .panel-icon, 50 | .layout-expand-east .panel-header .panel-icon { 51 | display: none; 52 | } 53 | .layout-expand-title { 54 | position: absolute; 55 | top: 0; 56 | left: 21px; 57 | white-space: nowrap; 58 | word-wrap: normal; 59 | -webkit-transform: rotate(90deg); 60 | -webkit-transform-origin: 0 0; 61 | -moz-transform: rotate(90deg); 62 | -moz-transform-origin: 0 0; 63 | -o-transform: rotate(90deg); 64 | -o-transform-origin: 0 0; 65 | transform: rotate(90deg); 66 | transform-origin: 0 0; 67 | } 68 | .layout-expand-with-icon { 69 | top: 18px; 70 | } 71 | .layout-expand .panel-body-noheader .layout-expand-title, 72 | .layout-expand .panel-body-noheader .panel-icon { 73 | top: 5px; 74 | } 75 | .layout-expand .panel-body-noheader .layout-expand-with-icon { 76 | top: 23px; 77 | } 78 | .layout-split-proxy-h, 79 | .layout-split-proxy-v { 80 | position: absolute; 81 | font-size: 1px; 82 | display: none; 83 | z-index: 5; 84 | } 85 | .layout-split-proxy-h { 86 | width: 5px; 87 | cursor: e-resize; 88 | } 89 | .layout-split-proxy-v { 90 | height: 5px; 91 | cursor: n-resize; 92 | } 93 | .layout-mask { 94 | position: absolute; 95 | background: #fafafa; 96 | filter: alpha(opacity=10); 97 | opacity: 0.10; 98 | z-index: 4; 99 | } 100 | .layout-button-up { 101 | background: url('images/layout_arrows.png') no-repeat -16px -16px; 102 | } 103 | .layout-button-down { 104 | background: url('images/layout_arrows.png') no-repeat -16px 0; 105 | } 106 | .layout-button-left { 107 | background: url('images/layout_arrows.png') no-repeat 0 0; 108 | } 109 | .layout-button-right { 110 | background: url('images/layout_arrows.png') no-repeat 0 -16px; 111 | } 112 | .layout-split-proxy-h, 113 | .layout-split-proxy-v { 114 | background-color: #b3b3b3; 115 | } 116 | .layout-split-north { 117 | border-bottom: 5px solid #fff; 118 | } 119 | .layout-split-south { 120 | border-top: 5px solid #fff; 121 | } 122 | .layout-split-east { 123 | border-left: 5px solid #fff; 124 | } 125 | .layout-split-west { 126 | border-right: 5px solid #fff; 127 | } 128 | .layout-expand { 129 | background-color: #ffffff; 130 | } 131 | .layout-expand-over { 132 | background-color: #ffffff; 133 | } 134 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/menu.css: -------------------------------------------------------------------------------- 1 | .menu { 2 | position: absolute; 3 | margin: 0; 4 | padding: 2px; 5 | border-width: 1px; 6 | border-style: solid; 7 | overflow: hidden; 8 | } 9 | .menu-inline { 10 | position: relative; 11 | } 12 | .menu-item { 13 | position: relative; 14 | margin: 0; 15 | padding: 0; 16 | overflow: hidden; 17 | white-space: nowrap; 18 | cursor: pointer; 19 | border-width: 1px; 20 | border-style: solid; 21 | } 22 | .menu-text { 23 | height: 20px; 24 | line-height: 20px; 25 | float: left; 26 | padding-left: 28px; 27 | } 28 | .menu-icon { 29 | position: absolute; 30 | width: 16px; 31 | height: 16px; 32 | left: 2px; 33 | top: 50%; 34 | margin-top: -8px; 35 | } 36 | .menu-rightarrow { 37 | position: absolute; 38 | width: 16px; 39 | height: 16px; 40 | right: 0; 41 | top: 50%; 42 | margin-top: -8px; 43 | } 44 | .menu-line { 45 | position: absolute; 46 | left: 26px; 47 | top: 0; 48 | height: 2000px; 49 | font-size: 1px; 50 | } 51 | .menu-sep { 52 | margin: 3px 0px 3px 25px; 53 | font-size: 1px; 54 | } 55 | .menu-noline .menu-line { 56 | display: none; 57 | } 58 | .menu-noline .menu-sep { 59 | margin-left: 0; 60 | margin-right: 0; 61 | } 62 | .menu-active { 63 | -moz-border-radius: 0px 0px 0px 0px; 64 | -webkit-border-radius: 0px 0px 0px 0px; 65 | border-radius: 0px 0px 0px 0px; 66 | } 67 | .menu-item-disabled { 68 | opacity: 0.5; 69 | filter: alpha(opacity=50); 70 | cursor: default; 71 | } 72 | .menu-text, 73 | .menu-text span { 74 | font-size: 12px; 75 | } 76 | .menu-shadow { 77 | position: absolute; 78 | -moz-border-radius: 0px 0px 0px 0px; 79 | -webkit-border-radius: 0px 0px 0px 0px; 80 | border-radius: 0px 0px 0px 0px; 81 | background: #eee; 82 | -moz-box-shadow: 2px 2px 3px #ededed; 83 | -webkit-box-shadow: 2px 2px 3px #ededed; 84 | box-shadow: 2px 2px 3px #ededed; 85 | filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); 86 | } 87 | .menu-rightarrow { 88 | background: url('images/menu_arrows.png') no-repeat -32px center; 89 | } 90 | .menu-line { 91 | border-left: 1px solid #ddd; 92 | border-right: 1px solid #fff; 93 | } 94 | .menu-sep { 95 | border-top: 1px solid #ddd; 96 | border-bottom: 1px solid #fff; 97 | } 98 | .menu { 99 | background-color: #ffffff; 100 | border-color: #ddd; 101 | color: #444; 102 | } 103 | .menu-content { 104 | background: #fff; 105 | } 106 | .menu-item { 107 | border-color: transparent; 108 | _border-color: #ffffff; 109 | } 110 | .menu-active { 111 | border-color: #ddd; 112 | color: #444; 113 | background: #E6E6E6; 114 | } 115 | .menu-active-disabled { 116 | border-color: transparent; 117 | background: transparent; 118 | color: #444; 119 | } 120 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/menubutton.css: -------------------------------------------------------------------------------- 1 | .m-btn-downarrow, 2 | .s-btn-downarrow { 3 | display: inline-block; 4 | position: absolute; 5 | width: 16px; 6 | height: 16px; 7 | font-size: 1px; 8 | right: 0; 9 | top: 50%; 10 | margin-top: -8px; 11 | } 12 | .m-btn-active, 13 | .s-btn-active { 14 | background: #E6E6E6; 15 | color: #444; 16 | border: 1px solid #ddd; 17 | filter: none; 18 | } 19 | .m-btn-plain-active, 20 | .s-btn-plain-active { 21 | background: transparent; 22 | padding: 0; 23 | border-width: 1px; 24 | border-style: solid; 25 | -moz-border-radius: 0px 0px 0px 0px; 26 | -webkit-border-radius: 0px 0px 0px 0px; 27 | border-radius: 0px 0px 0px 0px; 28 | } 29 | .m-btn .l-btn-left .l-btn-text { 30 | margin-right: 20px; 31 | } 32 | .m-btn .l-btn-icon-right .l-btn-text { 33 | margin-right: 40px; 34 | } 35 | .m-btn .l-btn-icon-right .l-btn-icon { 36 | right: 20px; 37 | } 38 | .m-btn .l-btn-icon-top .l-btn-text { 39 | margin-right: 4px; 40 | margin-bottom: 14px; 41 | } 42 | .m-btn .l-btn-icon-bottom .l-btn-text { 43 | margin-right: 4px; 44 | margin-bottom: 34px; 45 | } 46 | .m-btn .l-btn-icon-bottom .l-btn-icon { 47 | top: auto; 48 | bottom: 20px; 49 | } 50 | .m-btn .l-btn-icon-top .m-btn-downarrow, 51 | .m-btn .l-btn-icon-bottom .m-btn-downarrow { 52 | top: auto; 53 | bottom: 0px; 54 | left: 50%; 55 | margin-left: -8px; 56 | } 57 | .m-btn-line { 58 | display: inline-block; 59 | position: absolute; 60 | font-size: 1px; 61 | display: none; 62 | } 63 | .m-btn .l-btn-left .m-btn-line { 64 | right: 0; 65 | width: 16px; 66 | height: 500px; 67 | border-style: solid; 68 | border-color: #b3b3b3; 69 | border-width: 0 0 0 1px; 70 | } 71 | .m-btn .l-btn-icon-top .m-btn-line, 72 | .m-btn .l-btn-icon-bottom .m-btn-line { 73 | left: 0; 74 | bottom: 0; 75 | width: 500px; 76 | height: 16px; 77 | border-width: 1px 0 0 0; 78 | } 79 | .m-btn-large .l-btn-icon-right .l-btn-text { 80 | margin-right: 56px; 81 | } 82 | .m-btn-large .l-btn-icon-bottom .l-btn-text { 83 | margin-bottom: 50px; 84 | } 85 | .m-btn-downarrow, 86 | .s-btn-downarrow { 87 | background: url('images/menu_arrows.png') no-repeat 0 center; 88 | } 89 | .m-btn-plain-active, 90 | .s-btn-plain-active { 91 | border-color: #ddd; 92 | background-color: #E6E6E6; 93 | color: #444; 94 | } 95 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/messager.css: -------------------------------------------------------------------------------- 1 | .messager-body { 2 | padding: 10px 10px 30px 10px; 3 | overflow: auto; 4 | } 5 | .messager-button { 6 | text-align: center; 7 | padding: 5px; 8 | } 9 | .messager-button .l-btn { 10 | width: 70px; 11 | } 12 | .messager-icon { 13 | float: left; 14 | width: 32px; 15 | height: 32px; 16 | margin: 0 10px 10px 0; 17 | } 18 | .messager-error { 19 | background: url('images/messager_icons.png') no-repeat scroll -64px 0; 20 | } 21 | .messager-info { 22 | background: url('images/messager_icons.png') no-repeat scroll 0 0; 23 | } 24 | .messager-question { 25 | background: url('images/messager_icons.png') no-repeat scroll -32px 0; 26 | } 27 | .messager-warning { 28 | background: url('images/messager_icons.png') no-repeat scroll -96px 0; 29 | } 30 | .messager-progress { 31 | padding: 10px; 32 | } 33 | .messager-p-msg { 34 | margin-bottom: 5px; 35 | } 36 | .messager-body .messager-input { 37 | width: 100%; 38 | padding: 4px 0; 39 | outline-style: none; 40 | border: 1px solid #ddd; 41 | } 42 | .window-thinborder .messager-button { 43 | padding-bottom: 8px; 44 | } 45 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/numberbox.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/numberbox.css -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/pagination.css: -------------------------------------------------------------------------------- 1 | .pagination { 2 | zoom: 1; 3 | } 4 | .pagination table { 5 | float: left; 6 | height: 30px; 7 | } 8 | .pagination td { 9 | border: 0; 10 | } 11 | .pagination-btn-separator { 12 | float: left; 13 | height: 24px; 14 | border-left: 1px solid #ddd; 15 | border-right: 1px solid #fff; 16 | margin: 3px 1px; 17 | } 18 | .pagination .pagination-num { 19 | border-width: 1px; 20 | border-style: solid; 21 | margin: 0 2px; 22 | padding: 2px; 23 | width: 2em; 24 | height: auto; 25 | } 26 | .pagination-page-list { 27 | margin: 0px 6px; 28 | padding: 1px 2px; 29 | width: auto; 30 | height: auto; 31 | border-width: 1px; 32 | border-style: solid; 33 | } 34 | .pagination-info { 35 | float: right; 36 | margin: 0 6px 0 0; 37 | padding: 0; 38 | height: 30px; 39 | line-height: 30px; 40 | font-size: 12px; 41 | } 42 | .pagination span { 43 | font-size: 12px; 44 | } 45 | .pagination-link .l-btn-text { 46 | width: 24px; 47 | text-align: center; 48 | margin: 0; 49 | } 50 | .pagination-first { 51 | background: url('images/pagination_icons.png') no-repeat 0 center; 52 | } 53 | .pagination-prev { 54 | background: url('images/pagination_icons.png') no-repeat -16px center; 55 | } 56 | .pagination-next { 57 | background: url('images/pagination_icons.png') no-repeat -32px center; 58 | } 59 | .pagination-last { 60 | background: url('images/pagination_icons.png') no-repeat -48px center; 61 | } 62 | .pagination-load { 63 | background: url('images/pagination_icons.png') no-repeat -64px center; 64 | } 65 | .pagination-loading { 66 | background: url('images/loading.gif') no-repeat center center; 67 | } 68 | .pagination-page-list, 69 | .pagination .pagination-num { 70 | border-color: #ddd; 71 | } 72 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/panel.css: -------------------------------------------------------------------------------- 1 | .panel { 2 | overflow: hidden; 3 | text-align: left; 4 | margin: 0; 5 | border: 0; 6 | -moz-border-radius: 0 0 0 0; 7 | -webkit-border-radius: 0 0 0 0; 8 | border-radius: 0 0 0 0; 9 | } 10 | .panel-header, 11 | .panel-body { 12 | border-width: 1px; 13 | border-style: solid; 14 | } 15 | .panel-header { 16 | padding: 5px; 17 | position: relative; 18 | } 19 | .panel-title { 20 | background: url('images/blank.gif') no-repeat; 21 | } 22 | .panel-header-noborder { 23 | border-width: 0 0 1px 0; 24 | } 25 | .panel-body { 26 | overflow: auto; 27 | border-top-width: 0; 28 | padding: 0; 29 | } 30 | .panel-body-noheader { 31 | border-top-width: 1px; 32 | } 33 | .panel-body-noborder { 34 | border-width: 0px; 35 | } 36 | .panel-body-nobottom { 37 | border-bottom-width: 0; 38 | } 39 | .panel-with-icon { 40 | padding-left: 18px; 41 | } 42 | .panel-icon, 43 | .panel-tool { 44 | position: absolute; 45 | top: 50%; 46 | margin-top: -8px; 47 | height: 16px; 48 | overflow: hidden; 49 | } 50 | .panel-icon { 51 | left: 5px; 52 | width: 16px; 53 | } 54 | .panel-tool { 55 | right: 5px; 56 | width: auto; 57 | } 58 | .panel-tool a { 59 | display: inline-block; 60 | width: 16px; 61 | height: 16px; 62 | opacity: 0.6; 63 | filter: alpha(opacity=60); 64 | margin: 0 0 0 2px; 65 | vertical-align: top; 66 | } 67 | .panel-tool a:hover { 68 | opacity: 1; 69 | filter: alpha(opacity=100); 70 | background-color: #E6E6E6; 71 | -moz-border-radius: -2px -2px -2px -2px; 72 | -webkit-border-radius: -2px -2px -2px -2px; 73 | border-radius: -2px -2px -2px -2px; 74 | } 75 | .panel-loading { 76 | padding: 11px 0px 10px 30px; 77 | } 78 | .panel-noscroll { 79 | overflow: hidden; 80 | } 81 | .panel-fit, 82 | .panel-fit body { 83 | height: 100%; 84 | margin: 0; 85 | padding: 0; 86 | border: 0; 87 | overflow: hidden; 88 | } 89 | .panel-loading { 90 | background: url('images/loading.gif') no-repeat 10px 10px; 91 | } 92 | .panel-tool-close { 93 | background: url('images/panel_tools.png') no-repeat -16px 0px; 94 | } 95 | .panel-tool-min { 96 | background: url('images/panel_tools.png') no-repeat 0px 0px; 97 | } 98 | .panel-tool-max { 99 | background: url('images/panel_tools.png') no-repeat 0px -16px; 100 | } 101 | .panel-tool-restore { 102 | background: url('images/panel_tools.png') no-repeat -16px -16px; 103 | } 104 | .panel-tool-collapse { 105 | background: url('images/panel_tools.png') no-repeat -32px 0; 106 | } 107 | .panel-tool-expand { 108 | background: url('images/panel_tools.png') no-repeat -32px -16px; 109 | } 110 | .panel-header, 111 | .panel-body { 112 | border-color: #ddd; 113 | } 114 | .panel-header { 115 | background-color: #ffffff; 116 | } 117 | .panel-body { 118 | background-color: #fff; 119 | color: #444; 120 | font-size: 12px; 121 | } 122 | .panel-title { 123 | font-size: 12px; 124 | font-weight: bold; 125 | color: #777; 126 | height: 16px; 127 | line-height: 16px; 128 | } 129 | .panel-footer { 130 | border: 1px solid #ddd; 131 | overflow: hidden; 132 | background: #fff; 133 | } 134 | .panel-footer-noborder { 135 | border-width: 1px 0 0 0; 136 | } 137 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/progressbar.css: -------------------------------------------------------------------------------- 1 | .progressbar { 2 | border-width: 1px; 3 | border-style: solid; 4 | -moz-border-radius: 0px 0px 0px 0px; 5 | -webkit-border-radius: 0px 0px 0px 0px; 6 | border-radius: 0px 0px 0px 0px; 7 | overflow: hidden; 8 | position: relative; 9 | } 10 | .progressbar-text { 11 | text-align: center; 12 | position: absolute; 13 | } 14 | .progressbar-value { 15 | position: relative; 16 | overflow: hidden; 17 | width: 0; 18 | -moz-border-radius: 0px 0 0 0px; 19 | -webkit-border-radius: 0px 0 0 0px; 20 | border-radius: 0px 0 0 0px; 21 | } 22 | .progressbar { 23 | border-color: #ddd; 24 | } 25 | .progressbar-text { 26 | color: #444; 27 | font-size: 12px; 28 | } 29 | .progressbar-value .progressbar-text { 30 | background-color: #CCE6FF; 31 | color: #000; 32 | } 33 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/propertygrid.css: -------------------------------------------------------------------------------- 1 | .propertygrid .datagrid-view1 .datagrid-body td { 2 | padding-bottom: 1px; 3 | border-width: 0 1px 0 0; 4 | } 5 | .propertygrid .datagrid-group { 6 | height: 21px; 7 | overflow: hidden; 8 | border-width: 0 0 1px 0; 9 | border-style: solid; 10 | } 11 | .propertygrid .datagrid-group span { 12 | font-weight: bold; 13 | } 14 | .propertygrid .datagrid-view1 .datagrid-body td { 15 | border-color: #ddd; 16 | } 17 | .propertygrid .datagrid-view1 .datagrid-group { 18 | border-color: #ffffff; 19 | } 20 | .propertygrid .datagrid-view2 .datagrid-group { 21 | border-color: #ddd; 22 | } 23 | .propertygrid .datagrid-group, 24 | .propertygrid .datagrid-view1 .datagrid-body, 25 | .propertygrid .datagrid-view1 .datagrid-row-over, 26 | .propertygrid .datagrid-view1 .datagrid-row-selected { 27 | background: #ffffff; 28 | } 29 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/searchbox.css: -------------------------------------------------------------------------------- 1 | .searchbox-button { 2 | width: 18px; 3 | height: 20px; 4 | overflow: hidden; 5 | display: inline-block; 6 | vertical-align: top; 7 | cursor: pointer; 8 | opacity: 0.6; 9 | filter: alpha(opacity=60); 10 | } 11 | .searchbox-button-hover { 12 | opacity: 1.0; 13 | filter: alpha(opacity=100); 14 | } 15 | .searchbox .l-btn-plain { 16 | border: 0; 17 | padding: 0; 18 | vertical-align: top; 19 | opacity: 0.6; 20 | filter: alpha(opacity=60); 21 | -moz-border-radius: 0 0 0 0; 22 | -webkit-border-radius: 0 0 0 0; 23 | border-radius: 0 0 0 0; 24 | } 25 | .searchbox .l-btn-plain:hover { 26 | border: 0; 27 | padding: 0; 28 | opacity: 1.0; 29 | filter: alpha(opacity=100); 30 | -moz-border-radius: 0 0 0 0; 31 | -webkit-border-radius: 0 0 0 0; 32 | border-radius: 0 0 0 0; 33 | } 34 | .searchbox a.m-btn-plain-active { 35 | -moz-border-radius: 0 0 0 0; 36 | -webkit-border-radius: 0 0 0 0; 37 | border-radius: 0 0 0 0; 38 | } 39 | .searchbox .m-btn-active { 40 | border-width: 0 1px 0 0; 41 | -moz-border-radius: 0 0 0 0; 42 | -webkit-border-radius: 0 0 0 0; 43 | border-radius: 0 0 0 0; 44 | } 45 | .searchbox .textbox-button-right { 46 | border-width: 0 0 0 1px; 47 | } 48 | .searchbox .textbox-button-left { 49 | border-width: 0 1px 0 0; 50 | } 51 | .searchbox-button { 52 | background: url('images/searchbox_button.png') no-repeat center center; 53 | } 54 | .searchbox .l-btn-plain { 55 | background: #ffffff; 56 | } 57 | .searchbox .l-btn-plain-disabled, 58 | .searchbox .l-btn-plain-disabled:hover { 59 | opacity: 0.5; 60 | filter: alpha(opacity=50); 61 | } 62 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/slider.css: -------------------------------------------------------------------------------- 1 | .slider-disabled { 2 | opacity: 0.5; 3 | filter: alpha(opacity=50); 4 | } 5 | .slider-h { 6 | height: 22px; 7 | } 8 | .slider-v { 9 | width: 22px; 10 | } 11 | .slider-inner { 12 | position: relative; 13 | height: 6px; 14 | top: 7px; 15 | border-width: 1px; 16 | border-style: solid; 17 | border-radius: 0px; 18 | } 19 | .slider-handle { 20 | position: absolute; 21 | display: block; 22 | outline: none; 23 | width: 20px; 24 | height: 20px; 25 | top: 50%; 26 | margin-top: -10px; 27 | margin-left: -10px; 28 | } 29 | .slider-tip { 30 | position: absolute; 31 | display: inline-block; 32 | line-height: 12px; 33 | font-size: 12px; 34 | white-space: nowrap; 35 | top: -22px; 36 | } 37 | .slider-rule { 38 | position: relative; 39 | top: 15px; 40 | } 41 | .slider-rule span { 42 | position: absolute; 43 | display: inline-block; 44 | font-size: 0; 45 | height: 5px; 46 | border-width: 0 0 0 1px; 47 | border-style: solid; 48 | } 49 | .slider-rulelabel { 50 | position: relative; 51 | top: 20px; 52 | } 53 | .slider-rulelabel span { 54 | position: absolute; 55 | display: inline-block; 56 | font-size: 12px; 57 | } 58 | .slider-v .slider-inner { 59 | width: 6px; 60 | left: 7px; 61 | top: 0; 62 | float: left; 63 | } 64 | .slider-v .slider-handle { 65 | left: 50%; 66 | margin-top: -10px; 67 | } 68 | .slider-v .slider-tip { 69 | left: -10px; 70 | margin-top: -6px; 71 | } 72 | .slider-v .slider-rule { 73 | float: left; 74 | top: 0; 75 | left: 16px; 76 | } 77 | .slider-v .slider-rule span { 78 | width: 5px; 79 | height: 'auto'; 80 | border-left: 0; 81 | border-width: 1px 0 0 0; 82 | border-style: solid; 83 | } 84 | .slider-v .slider-rulelabel { 85 | float: left; 86 | top: 0; 87 | left: 23px; 88 | } 89 | .slider-handle { 90 | background: url('images/slider_handle.png') no-repeat; 91 | } 92 | .slider-inner { 93 | border-color: #ddd; 94 | background: #ffffff; 95 | } 96 | .slider-rule span { 97 | border-color: #ddd; 98 | } 99 | .slider-rulelabel span { 100 | color: #444; 101 | } 102 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/spinner.css: -------------------------------------------------------------------------------- 1 | .spinner-arrow { 2 | background-color: #ffffff; 3 | display: inline-block; 4 | overflow: hidden; 5 | vertical-align: top; 6 | margin: 0; 7 | padding: 0; 8 | opacity: 1.0; 9 | filter: alpha(opacity=100); 10 | width: 18px; 11 | } 12 | .spinner-arrow-up, 13 | .spinner-arrow-down { 14 | opacity: 0.6; 15 | filter: alpha(opacity=60); 16 | display: block; 17 | font-size: 1px; 18 | width: 18px; 19 | height: 10px; 20 | width: 100%; 21 | height: 50%; 22 | color: #777; 23 | outline-style: none; 24 | } 25 | .spinner-arrow-hover { 26 | background-color: #E6E6E6; 27 | opacity: 1.0; 28 | filter: alpha(opacity=100); 29 | } 30 | .spinner-arrow-up:hover, 31 | .spinner-arrow-down:hover { 32 | opacity: 1.0; 33 | filter: alpha(opacity=100); 34 | background-color: #E6E6E6; 35 | } 36 | .textbox-icon-disabled .spinner-arrow-up:hover, 37 | .textbox-icon-disabled .spinner-arrow-down:hover { 38 | opacity: 0.6; 39 | filter: alpha(opacity=60); 40 | background-color: #ffffff; 41 | cursor: default; 42 | } 43 | .spinner .textbox-icon-disabled { 44 | opacity: 0.6; 45 | filter: alpha(opacity=60); 46 | } 47 | .spinner-arrow-up { 48 | background: url('images/spinner_arrows.png') no-repeat 1px center; 49 | } 50 | .spinner-arrow-down { 51 | background: url('images/spinner_arrows.png') no-repeat -15px center; 52 | } 53 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/splitbutton.css: -------------------------------------------------------------------------------- 1 | .s-btn:hover .m-btn-line, 2 | .s-btn-active .m-btn-line, 3 | .s-btn-plain-active .m-btn-line { 4 | display: inline-block; 5 | } 6 | .l-btn:hover .s-btn-downarrow, 7 | .s-btn-active .s-btn-downarrow, 8 | .s-btn-plain-active .s-btn-downarrow { 9 | border-style: solid; 10 | border-color: #b3b3b3; 11 | border-width: 0 0 0 1px; 12 | } 13 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/switchbutton.css: -------------------------------------------------------------------------------- 1 | .switchbutton { 2 | text-decoration: none; 3 | display: inline-block; 4 | overflow: hidden; 5 | vertical-align: middle; 6 | margin: 0; 7 | padding: 0; 8 | cursor: pointer; 9 | background: #dddddd; 10 | border: 1px solid #dddddd; 11 | -moz-border-radius: 0px 0px 0px 0px; 12 | -webkit-border-radius: 0px 0px 0px 0px; 13 | border-radius: 0px 0px 0px 0px; 14 | } 15 | .switchbutton-inner { 16 | display: inline-block; 17 | overflow: hidden; 18 | position: relative; 19 | top: -1px; 20 | left: -1px; 21 | } 22 | .switchbutton-on, 23 | .switchbutton-off, 24 | .switchbutton-handle { 25 | display: inline-block; 26 | text-align: center; 27 | height: 100%; 28 | float: left; 29 | font-size: 12px; 30 | -moz-border-radius: 0px 0px 0px 0px; 31 | -webkit-border-radius: 0px 0px 0px 0px; 32 | border-radius: 0px 0px 0px 0px; 33 | } 34 | .switchbutton-on { 35 | background: #CCE6FF; 36 | color: #000; 37 | } 38 | .switchbutton-off { 39 | background-color: #fff; 40 | color: #444; 41 | } 42 | .switchbutton-on, 43 | .switchbutton-reversed .switchbutton-off { 44 | -moz-border-radius: 0px 0 0 0px; 45 | -webkit-border-radius: 0px 0 0 0px; 46 | border-radius: 0px 0 0 0px; 47 | } 48 | .switchbutton-off, 49 | .switchbutton-reversed .switchbutton-on { 50 | -moz-border-radius: 0 0px 0px 0; 51 | -webkit-border-radius: 0 0px 0px 0; 52 | border-radius: 0 0px 0px 0; 53 | } 54 | .switchbutton-handle { 55 | position: absolute; 56 | top: 0; 57 | left: 50%; 58 | background-color: #fff; 59 | color: #444; 60 | border: 1px solid #dddddd; 61 | -moz-box-shadow: 0 0 3px 0 #dddddd; 62 | -webkit-box-shadow: 0 0 3px 0 #dddddd; 63 | box-shadow: 0 0 3px 0 #dddddd; 64 | } 65 | .switchbutton-value { 66 | position: absolute; 67 | top: 0; 68 | left: -5000px; 69 | } 70 | .switchbutton-disabled { 71 | opacity: 0.5; 72 | filter: alpha(opacity=50); 73 | } 74 | .switchbutton-disabled, 75 | .switchbutton-readonly { 76 | cursor: default; 77 | } 78 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/textbox.css: -------------------------------------------------------------------------------- 1 | .textbox { 2 | position: relative; 3 | border: 1px solid #ddd; 4 | background-color: #fff; 5 | vertical-align: middle; 6 | display: inline-block; 7 | overflow: hidden; 8 | white-space: nowrap; 9 | margin: 0; 10 | padding: 0; 11 | -moz-border-radius: 0px 0px 0px 0px; 12 | -webkit-border-radius: 0px 0px 0px 0px; 13 | border-radius: 0px 0px 0px 0px; 14 | } 15 | .textbox .textbox-text { 16 | font-size: 12px; 17 | border: 0; 18 | margin: 0; 19 | padding: 4px; 20 | white-space: normal; 21 | vertical-align: top; 22 | outline-style: none; 23 | resize: none; 24 | -moz-border-radius: 0px 0px 0px 0px; 25 | -webkit-border-radius: 0px 0px 0px 0px; 26 | border-radius: 0px 0px 0px 0px; 27 | } 28 | .textbox .textbox-text::-ms-clear, 29 | .textbox .textbox-text::-ms-reveal { 30 | display: none; 31 | } 32 | .textbox textarea.textbox-text { 33 | white-space: pre-wrap; 34 | } 35 | .textbox .textbox-prompt { 36 | font-size: 12px; 37 | color: #aaa; 38 | } 39 | .textbox .textbox-bgicon { 40 | background-position: 3px center; 41 | padding-left: 21px; 42 | } 43 | .textbox .textbox-button, 44 | .textbox .textbox-button:hover { 45 | position: absolute; 46 | top: 0; 47 | padding: 0; 48 | vertical-align: top; 49 | -moz-border-radius: 0 0 0 0; 50 | -webkit-border-radius: 0 0 0 0; 51 | border-radius: 0 0 0 0; 52 | } 53 | .textbox-button-right, 54 | .textbox-button-right:hover { 55 | border-width: 0 0 0 1px; 56 | } 57 | .textbox-button-left, 58 | .textbox-button-left:hover { 59 | border-width: 0 1px 0 0; 60 | } 61 | .textbox-addon { 62 | position: absolute; 63 | top: 0; 64 | } 65 | .textbox-icon { 66 | display: inline-block; 67 | width: 18px; 68 | height: 20px; 69 | overflow: hidden; 70 | vertical-align: top; 71 | background-position: center center; 72 | cursor: pointer; 73 | opacity: 0.6; 74 | filter: alpha(opacity=60); 75 | text-decoration: none; 76 | outline-style: none; 77 | } 78 | .textbox-icon-disabled, 79 | .textbox-icon-readonly { 80 | cursor: default; 81 | } 82 | .textbox-icon:hover { 83 | opacity: 1.0; 84 | filter: alpha(opacity=100); 85 | } 86 | .textbox-icon-disabled:hover { 87 | opacity: 0.6; 88 | filter: alpha(opacity=60); 89 | } 90 | .textbox-focused { 91 | border-color: #c4c4c4; 92 | -moz-box-shadow: 0 0 3px 0 #ddd; 93 | -webkit-box-shadow: 0 0 3px 0 #ddd; 94 | box-shadow: 0 0 3px 0 #ddd; 95 | } 96 | .textbox-invalid { 97 | border-color: #ffa8a8; 98 | background-color: #fff3f3; 99 | } 100 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/tooltip.css: -------------------------------------------------------------------------------- 1 | .tooltip { 2 | position: absolute; 3 | display: none; 4 | z-index: 9900000; 5 | outline: none; 6 | opacity: 1; 7 | filter: alpha(opacity=100); 8 | padding: 5px; 9 | border-width: 1px; 10 | border-style: solid; 11 | border-radius: 5px; 12 | -moz-border-radius: 0px 0px 0px 0px; 13 | -webkit-border-radius: 0px 0px 0px 0px; 14 | border-radius: 0px 0px 0px 0px; 15 | } 16 | .tooltip-content { 17 | font-size: 12px; 18 | } 19 | .tooltip-arrow-outer, 20 | .tooltip-arrow { 21 | position: absolute; 22 | width: 0; 23 | height: 0; 24 | line-height: 0; 25 | font-size: 0; 26 | border-style: solid; 27 | border-width: 6px; 28 | border-color: transparent; 29 | _border-color: tomato; 30 | _filter: chroma(color=tomato); 31 | } 32 | .tooltip-arrow { 33 | display: none \9; 34 | } 35 | .tooltip-right .tooltip-arrow-outer { 36 | left: 0; 37 | top: 50%; 38 | margin: -6px 0 0 -13px; 39 | } 40 | .tooltip-right .tooltip-arrow { 41 | left: 0; 42 | top: 50%; 43 | margin: -6px 0 0 -12px; 44 | } 45 | .tooltip-left .tooltip-arrow-outer { 46 | right: 0; 47 | top: 50%; 48 | margin: -6px -13px 0 0; 49 | } 50 | .tooltip-left .tooltip-arrow { 51 | right: 0; 52 | top: 50%; 53 | margin: -6px -12px 0 0; 54 | } 55 | .tooltip-top .tooltip-arrow-outer { 56 | bottom: 0; 57 | left: 50%; 58 | margin: 0 0 -13px -6px; 59 | } 60 | .tooltip-top .tooltip-arrow { 61 | bottom: 0; 62 | left: 50%; 63 | margin: 0 0 -12px -6px; 64 | } 65 | .tooltip-bottom .tooltip-arrow-outer { 66 | top: 0; 67 | left: 50%; 68 | margin: -13px 0 0 -6px; 69 | } 70 | .tooltip-bottom .tooltip-arrow { 71 | top: 0; 72 | left: 50%; 73 | margin: -12px 0 0 -6px; 74 | } 75 | .tooltip { 76 | background-color: #fff; 77 | border-color: #ddd; 78 | color: #444; 79 | } 80 | .tooltip-right .tooltip-arrow-outer { 81 | border-right-color: #ddd; 82 | } 83 | .tooltip-right .tooltip-arrow { 84 | border-right-color: #fff; 85 | } 86 | .tooltip-left .tooltip-arrow-outer { 87 | border-left-color: #ddd; 88 | } 89 | .tooltip-left .tooltip-arrow { 90 | border-left-color: #fff; 91 | } 92 | .tooltip-top .tooltip-arrow-outer { 93 | border-top-color: #ddd; 94 | } 95 | .tooltip-top .tooltip-arrow { 96 | border-top-color: #fff; 97 | } 98 | .tooltip-bottom .tooltip-arrow-outer { 99 | border-bottom-color: #ddd; 100 | } 101 | .tooltip-bottom .tooltip-arrow { 102 | border-bottom-color: #fff; 103 | } 104 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/tree.css: -------------------------------------------------------------------------------- 1 | .tree { 2 | margin: 0; 3 | padding: 0; 4 | list-style-type: none; 5 | } 6 | .tree li { 7 | white-space: nowrap; 8 | } 9 | .tree li ul { 10 | list-style-type: none; 11 | margin: 0; 12 | padding: 0; 13 | } 14 | .tree-node { 15 | height: 18px; 16 | white-space: nowrap; 17 | cursor: pointer; 18 | } 19 | .tree-hit { 20 | cursor: pointer; 21 | } 22 | .tree-expanded, 23 | .tree-collapsed, 24 | .tree-folder, 25 | .tree-file, 26 | .tree-checkbox, 27 | .tree-indent { 28 | display: inline-block; 29 | width: 16px; 30 | height: 18px; 31 | vertical-align: top; 32 | overflow: hidden; 33 | } 34 | .tree-expanded { 35 | background: url('images/tree_icons.png') no-repeat -18px 0px; 36 | } 37 | .tree-expanded-hover { 38 | background: url('images/tree_icons.png') no-repeat -50px 0px; 39 | } 40 | .tree-collapsed { 41 | background: url('images/tree_icons.png') no-repeat 0px 0px; 42 | } 43 | .tree-collapsed-hover { 44 | background: url('images/tree_icons.png') no-repeat -32px 0px; 45 | } 46 | .tree-lines .tree-expanded, 47 | .tree-lines .tree-root-first .tree-expanded { 48 | background: url('images/tree_icons.png') no-repeat -144px 0; 49 | } 50 | .tree-lines .tree-collapsed, 51 | .tree-lines .tree-root-first .tree-collapsed { 52 | background: url('images/tree_icons.png') no-repeat -128px 0; 53 | } 54 | .tree-lines .tree-node-last .tree-expanded, 55 | .tree-lines .tree-root-one .tree-expanded { 56 | background: url('images/tree_icons.png') no-repeat -80px 0; 57 | } 58 | .tree-lines .tree-node-last .tree-collapsed, 59 | .tree-lines .tree-root-one .tree-collapsed { 60 | background: url('images/tree_icons.png') no-repeat -64px 0; 61 | } 62 | .tree-line { 63 | background: url('images/tree_icons.png') no-repeat -176px 0; 64 | } 65 | .tree-join { 66 | background: url('images/tree_icons.png') no-repeat -192px 0; 67 | } 68 | .tree-joinbottom { 69 | background: url('images/tree_icons.png') no-repeat -160px 0; 70 | } 71 | .tree-folder { 72 | background: url('images/tree_icons.png') no-repeat -208px 0; 73 | } 74 | .tree-folder-open { 75 | background: url('images/tree_icons.png') no-repeat -224px 0; 76 | } 77 | .tree-file { 78 | background: url('images/tree_icons.png') no-repeat -240px 0; 79 | } 80 | .tree-loading { 81 | background: url('images/loading.gif') no-repeat center center; 82 | } 83 | .tree-checkbox0 { 84 | background: url('images/tree_icons.png') no-repeat -208px -18px; 85 | } 86 | .tree-checkbox1 { 87 | background: url('images/tree_icons.png') no-repeat -224px -18px; 88 | } 89 | .tree-checkbox2 { 90 | background: url('images/tree_icons.png') no-repeat -240px -18px; 91 | } 92 | .tree-title { 93 | font-size: 12px; 94 | display: inline-block; 95 | text-decoration: none; 96 | vertical-align: top; 97 | white-space: nowrap; 98 | padding: 0 2px; 99 | height: 18px; 100 | line-height: 18px; 101 | } 102 | .tree-node-proxy { 103 | font-size: 12px; 104 | line-height: 20px; 105 | padding: 0 2px 0 20px; 106 | border-width: 1px; 107 | border-style: solid; 108 | z-index: 9900000; 109 | } 110 | .tree-dnd-icon { 111 | display: inline-block; 112 | position: absolute; 113 | width: 16px; 114 | height: 18px; 115 | left: 2px; 116 | top: 50%; 117 | margin-top: -9px; 118 | } 119 | .tree-dnd-yes { 120 | background: url('images/tree_icons.png') no-repeat -256px 0; 121 | } 122 | .tree-dnd-no { 123 | background: url('images/tree_icons.png') no-repeat -256px -18px; 124 | } 125 | .tree-node-top { 126 | border-top: 1px dotted red; 127 | } 128 | .tree-node-bottom { 129 | border-bottom: 1px dotted red; 130 | } 131 | .tree-node-append .tree-title { 132 | border: 1px dotted red; 133 | } 134 | .tree-editor { 135 | border: 1px solid #ddd; 136 | font-size: 12px; 137 | line-height: 16px; 138 | padding: 0 4px; 139 | margin: 0; 140 | width: 80px; 141 | outline-style: none; 142 | vertical-align: top; 143 | position: absolute; 144 | top: 0; 145 | } 146 | .tree-node-proxy { 147 | background-color: #fff; 148 | color: #444; 149 | border-color: #ddd; 150 | } 151 | .tree-node-hover { 152 | background: #E6E6E6; 153 | color: #444; 154 | } 155 | .tree-node-selected { 156 | background: #CCE6FF; 157 | color: #000; 158 | } 159 | .tree-node-hidden { 160 | display: none; 161 | } 162 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/validatebox.css: -------------------------------------------------------------------------------- 1 | .validatebox-invalid { 2 | border-color: #ffa8a8; 3 | background-color: #fff3f3; 4 | color: #000; 5 | } 6 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/easyui/themes/metro/window.css: -------------------------------------------------------------------------------- 1 | .window { 2 | overflow: hidden; 3 | padding: 5px; 4 | border-width: 1px; 5 | border-style: solid; 6 | } 7 | .window .window-header { 8 | background: transparent; 9 | padding: 0px 0px 6px 0px; 10 | } 11 | .window .window-body { 12 | border-width: 1px; 13 | border-style: solid; 14 | border-top-width: 0px; 15 | } 16 | .window .window-body-noheader { 17 | border-top-width: 1px; 18 | } 19 | .window .panel-body-nobottom { 20 | border-bottom-width: 0; 21 | } 22 | .window .window-header .panel-icon, 23 | .window .window-header .panel-tool { 24 | top: 50%; 25 | margin-top: -11px; 26 | } 27 | .window .window-header .panel-icon { 28 | left: 1px; 29 | } 30 | .window .window-header .panel-tool { 31 | right: 1px; 32 | } 33 | .window .window-header .panel-with-icon { 34 | padding-left: 18px; 35 | } 36 | .window-proxy { 37 | position: absolute; 38 | overflow: hidden; 39 | } 40 | .window-proxy-mask { 41 | position: absolute; 42 | filter: alpha(opacity=5); 43 | opacity: 0.05; 44 | } 45 | .window-mask { 46 | position: absolute; 47 | left: 0; 48 | top: 0; 49 | width: 100%; 50 | height: 100%; 51 | filter: alpha(opacity=40); 52 | opacity: 0.40; 53 | font-size: 1px; 54 | overflow: hidden; 55 | } 56 | .window, 57 | .window-shadow { 58 | position: absolute; 59 | -moz-border-radius: 0px 0px 0px 0px; 60 | -webkit-border-radius: 0px 0px 0px 0px; 61 | border-radius: 0px 0px 0px 0px; 62 | } 63 | .window-shadow { 64 | background: #eee; 65 | -moz-box-shadow: 2px 2px 3px #ededed; 66 | -webkit-box-shadow: 2px 2px 3px #ededed; 67 | box-shadow: 2px 2px 3px #ededed; 68 | filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); 69 | } 70 | .window, 71 | .window .window-body { 72 | border-color: #ddd; 73 | } 74 | .window { 75 | background-color: #ffffff; 76 | } 77 | .window-proxy { 78 | border: 1px dashed #ddd; 79 | } 80 | .window-proxy-mask, 81 | .window-mask { 82 | background: #eee; 83 | } 84 | .window .panel-footer { 85 | border: 1px solid #ddd; 86 | position: relative; 87 | top: -1px; 88 | } 89 | .window-thinborder { 90 | padding: 0; 91 | } 92 | .window-thinborder .window-header { 93 | padding: 5px 5px 6px 5px; 94 | } 95 | .window-thinborder .window-body { 96 | border-width: 0px; 97 | } 98 | .window-thinborder .window-header .panel-icon, 99 | .window-thinborder .window-header .panel-tool { 100 | margin-top: -9px; 101 | margin-left: 5px; 102 | margin-right: 5px; 103 | } 104 | .window-noborder { 105 | border: 0; 106 | } 107 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/exist.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/static/exist.txt -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/templates/intro.html: -------------------------------------------------------------------------------- 1 | 8 | 9 | 10 | 11 | 12 | intro 13 | 14 | 15 | 16 |
18 |

图书爬虫BookCrawler ୧(๑•̀◡•́๑)૭

19 |

开发人员: 黄宇辉

20 |

联系方式-Email: Gentleman_0109@outlook.com

21 |

联系方式-QQ: 3083968068

22 |

开发周期: 2019/7/16 —— 2019/7/17

23 |
24 |

项目开发环境介绍

25 |

操作系统: Windows 10 Pro

26 |

开发工具: Intellij IDEA 2019.1.3

27 |

Java版本: 11.0.2

28 |

数据库: Server version: 8.0.11 MySQL Community Server - GPL

29 |

采用技术: WebMagic+Thymeleaf+jQuery+Ajax+EasyUI+Spring Boot+MyBatis+MySQL+Maven

30 |
31 | 32 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/bookcrawler-v3.0/src/main/resources/templates/main.html: -------------------------------------------------------------------------------- 1 | 8 | 9 | 10 | 11 | 12 | 图书爬虫V3.0 ୧(๑•̀◡•́๑)૭ 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |
49 | 52 |
53 | 54 | 55 |
56 | 59 |
60 | 61 | 62 |
63 |
64 | 65 |
66 |
67 |
68 | 69 | 70 | -------------------------------------------------------------------------------- /BookCrawler-v3.0/demonstration-images/BookCrawler-V3.0-Intro.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/demonstration-images/BookCrawler-V3.0-Intro.PNG -------------------------------------------------------------------------------- /BookCrawler-v3.0/demonstration-images/BookCrawler-V3.0-bookList.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/BookCrawler-v3.0/demonstration-images/BookCrawler-V3.0-bookList.PNG -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 黄宇辉 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /bookcrawler-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogTech/crawler-learning/1526e0018a3a25cd9db407ee524e78754916bb3f/bookcrawler-icon.png --------------------------------------------------------------------------------