# comic_crawl_system **Repository Path**: wu-binlong/comic_crawl_system ## Basic Information - **Project Name**: comic_crawl_system - **Description**: 爬取6漫画网站,使用pyqt5进行还原一个漫画软件 - **Primary Language**: Python - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-11-16 - **Last Updated**: 2023-01-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于Selenium爬取6漫画网站系统 ## 介绍 ​ 漫画,是一种艺术形式,是用简单而夸张的手法来描绘生活或时事的图画。漫画又是视觉艺术,它囊括了一切绘画表现手段,通过对漫画作品的描绘,对漫画主题起到了渲染和烘托作用,使漫画主题思想深化。在中国现代绘画史上,漫画是最活跃并取得显著成。清末民初中国古代已有以讽刺为目的、具有漫画特点的绘画,但未形成独立的画种。在西方地区同样也存在各种各样的漫画风格,比如美国 最著名的漫威漫画,直至今天漫威漫画也同样深受喜欢,而对于日本国家更是作为漫画、动漫的提供商,将动漫进入现代潮流。对于漫画无法逃脱的是付费项目,总是与自己心爱的漫画擦肩而过,为了解决这一问题,我将使用Selenium库爬取6漫画网站获取免费的漫画,并开发一个可操作的UI界面。我将本项目分为5个步骤: 据说,我国绘画史上最早出本文将为你介绍整个系统的各个部分及数据库设计与思想,本项目主要使用模拟Chrome游览器对6漫画网站爬取漫画信息,通过爬取的信息存放在数据库中,其次会使用Python的第三方库PyQt5设计UI交互界面,提供用户可以对爬取的漫画进行观看, 1. 安装Selenium库与python环境; 2. 分析6漫画网站并爬取数据; 3. 数据库设计与漫画信息存储; 4. 设计系统UI界面与交互功能。 **Selenium库** ​ Selenium库是一个自动化测试工具,能够驱动浏览器模拟人的操作,如鼠标单击、键盘输入等。通过selenium库能够比较容易地获取到网页的源代码,还可以进行网络内容的批量自动下载等。上海证券交易所的公开信息、新浪财经的股票行情实时数据等网页都是动态渲染出来的,而通过常规爬虫手段获取的则是未经渲染的信息,面对这种没有渲染的网页,在数据挖掘时就需要使用selenium库,通过模拟人在浏览器中的操作,快速获取渲染后的网页源代码。 **6漫画网站** ​ 6漫画为公司旗下互联网漫画平台之一,这是一个热门漫画IP聚合平台,实时发布最新最热漫画,深度挖掘粉丝需求,搜索方便快捷,界面简约舒适,拥有极好的互动性、创造性和趣味性。 ![image-20220926170259637](./document_images/image-20220926170259637.png) **PyQt5** ​ PyQt5是Qt框架的Python语言实现,由Riverbank Computing开发,是最强大的GUI库之一。PyQt5则是基于高性能的Qt的GUI控件集,能够跨平台运行在Linux、Window和Mac OS系统上、使用信号槽机制进行通信、对Qt库进行完全封装、可以使用成熟的IDE进行界面设计,并自动生成可执行的Python代码、提供一整套种类齐全的窗口控件等。 ![](./document_images/image-20220926173656557.png) ## 环境需求 当你想运行整个程序时,那你应该先准备一个Python=3.6.2版本的环境,你可以有两个方式创建这个环境 1. 你可以登录Python官方网站,从中寻找一个python版本号为3.6的任意一个版本,然后实现本地安装。 2. 你可以在Anaconda软件下,创建一个Python为3.6.x的虚拟环境。【你应该在Anaconda Prompt (Anaconda)控制台中输入下面命令】。 ```conda conda create -n 环境名称 python=3.6.2 ``` 最终你会获得本次运行下的Python环境。 ## 包的依赖 环境的搭建仅仅时第一步,你应该在这个环境下安装以下的第三方库 ``` opencv-python==4.6.0.66 urllib3==1.26.9 PyQt5==5.10.1 pymysql==1.0.2 scipy==1.5.4 selenium==3.14.0 ``` 如果你想让更快运行到本次项目,那你应该临时使用清华的镜像源,使用方法如下: ```pip pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package ``` ## 表的设计 ​ 我创建一个comics数据库,数据库主要存在两种表格,一种存放漫画信息,另一种漫画章节信息,我们会从排行盘首先进入漫画介绍页面,通过介绍页面我们将会爬取到一个漫画所有信息,通过comics_info表进行存储,其中会存储以下9种信息,由于爬取信息的长度不一致,所以选择一个比较兼容的字符串类型,其次会存放漫画介绍的URL,主要为另一张表提供爬取路径。 ```mysql comics_id bigint primary key auto_increment comics_name varchar(255) comics_label varchar(100) category varchar(100) author varchar(255) reduce varchar(255) cover_path varchar(100) comics_url varchar(50) cover_url varchar(255) ``` ​ 对于另一张表命名为comics_chapter表,其主要作用存放每一个漫画的章节目录与图片,由于每一章节图片太多,我将采用路径存储,最后也同样方便读取。comics_chapter表主要存在5个终字段,其每一个字段的填充都是需要对comics_info表遍历获取comics_url,才能做到信息对应。 ```mysql id bigint primary key auto_increment comics_id bigint chapter_name varchar(100) chapter_url varchar(100) chapter_dir varchar(100) constraint chapter_comics_info foreign key(comics_id) references comics_info(comics_id) ``` ​ 我将comics_info表与comics_chapter表需要绑定外键,以方便表的统一性。 ## 如何使用 本次项目使用MySQL作为存储系统,当你没有存在MySQL数据库时,你可以按照下面方式进行安装: 1. 我们需要从MySQl官网下载一个MySQL,你可以选择一个8.x版本以上的进行下载; ![image-20220926171717508](./document_images/image-20220926171717508.png) ![image-20220926171659028](./document_images/image-20220926171659028.png) 2. 由于文件内容有限,我将使用以链接方式教你安装MySQL,你可以访问MySQL安装步骤,完成安装。 2. 当你已经安装完成MySQL数据库,并存在一个超级用户,你需要先创建一个comics数据库,才能使用数据库读取数据,存储数据,你只需对‘database_tool/storage_resources.py’进行你修改,将数据库信息修改成你本地数据库信息; ```python self.connect = pymysql.connect(host='localhost', user='root', password='root', charset='utf8', database='comics') ``` 4. 当你数据库连接信息创建成功是,你可以先运行‘database_tool/storage_resources.py’创建两张表; 5. 完成以上步骤你已经具有存储数据条件,其次你需要运行‘crawling/crawl_data.py’文件,crawling模块会完成翻页爬取数据,包含漫画信息、漫画章节信息,由于数据信息过多,我只爬取2页漫画信息,你可以对get_comics_info函数第一行修改页数,如下所示。 ```python for page in range(1, 3): # 修改页数 self.url = r"http://www.sixmh7.com/rank/1-{}.html".format(page) self.driver = webdriver.Chrome(chrome_options=self.chrome_options) self.driver.get(self.url) element = self.driver.find_element_by_xpath('//div[@class="cy_list_mh"]') ``` 运行时会出现这样画面: ![QQ图片20220926175712](./document_images/QQ图片20220926175712.png) ​ 当然2页漫画数据对应的章节同样也会很多,每一章的图片会60-80张图片,当你电脑就有足够内存时,你可以修改这行代码爬取所有图片。 ```python if i < 5 and len(url) == 32: # 取五张 img_url = 'https://p3.dcarimg.com/tos-cn-i-8gu37r9deh/{}~noop.jpg'.format(url) reps = urllib.request.Request(img_url, headers=self.headers) img_path = folder_path + "/" + str(i) + '.jpg' # 图片名字 with urllib.request.urlopen(reps, timeout=10) as rep: ``` 运行时会出现这样画面: ![image-20220926175814091](./document_images/image-20220926175814091.png) 6. 当你运行完‘crawling/crawl_data.py’数据后,你的项目路径下会生成一个resource文件夹,内面会存放所有图片。你可以观看数据库两张表的数据,参看数据是否存储成功。 comics_chapter表 ![image-20220926175912918](./document_images/image-20220926175912918.png) comics_info表 ![image-20220926175937103](./document_images/image-20220926175937103.png) 7. 在这恭喜你可以使用本次界面,你需要找到main/interface.py运行界面,其中功能可以免费阅读。会出现下面页面。 ![image-20220927003432027](./document_images/image-20220927003432027.png)