项目介绍
作为初学 Python 的萌新,这是我写的第2个爬虫项目,也是第一个较为完美达到预期的项目。
项目流程:
1.确定爬取网站
- 漫画粉网站------https://www.manhuafen.com/
2.确定爬取内容:
-
先在漫画粉网上收集自己喜欢的漫画的必要信息:
1.漫画名称
2.漫画的目录首页链接
3.漫画第1章节的首页链接 -
然后将这些信息写进CSV格式文件,保存为manhuafen_down_link.csv 如下图 :
在程序开始时,先读取文件 manhuafen_down_link.csv 中的内容并保存到一个列表 link_list 中 ,用于遍历循环下载列表中的漫画并实时更新最新下载进度,并重新写入文件 manhuafen_down_link.csv 中,以防突然网络中断或程序崩溃后,可以接着保存的进度继续下载;或者当漫画有更新时可以接着最新的进度继续下载已更新的漫画。
3.令程序每次执行下载漫画之前,都要先确认现有漫画文件夹里面的子文件夹的个数,其实也就是确认已经下载的漫画章节数,然后打开漫画目录首页,通过路径查询方法 web.find_elements_by_xpath() 和 len() 函数获取漫画首页的章节总数。两个总数一比较就知道当前漫画自从上一次下载完后有没有更新,如果有更新就接着最新进度下载,没有更新则转到下一部漫画继续这样轮下去,直到列表 link_list 遍历完。
4.下载章节漫画之前,利用路径查询方法 web.find_elements_by_xpath() 和 get_attribute() 方法获取漫画图片的 url ,再传递给 request.urlretrieve() 下载图片并保存到指定位置。为了判断当前的章节所有页数是否已经全部下载完,需要确定当前子文件夹中已下载的图片总数和当前章节的总页数,在每次下图片之前都先比较两个总数的大小来进行判断。并且每下载完一章后再重新比较总章数和总的子文件夹个数的大小,判断是否以全部下载完整部漫画,如果以完成则跳出循环回到 link_list 列表循环继续下载下一部漫画。以此类推直到下载完列表中的所有漫画。
5.下载完所有漫画后,结束整个主循环并打印下载表单,显示所有下载信息。
以上就是项目的基本内容和步骤思路了,源代码中基本每行都有注释,因此结合起来看应该不难理解。
源代码
该项目涉及的Pthon 的基础内容有循环语句、文件路径、列表、字典、函数、CSV文件读取和写入、正则表达式、requests和selenium模块的基本语句用法等。我的参考书《Python编程快速上手——让繁琐工作自动化》
"""---------------如何利用requests和selenium模块自动爬取漫画网站的整部漫画?-------------------
author:weilairensheng
项目主要实现的功能:
1、自动下载漫画粉网站上指定的多部漫画。
2、实时更新下载进度,防止断网或关闭程序后重新运行时能接着之前的进度继续下载。
3、自动创建用于存储漫画的文件夹,自动命名图面名称。
4、自动检查漫画是否更新,如果更新了就下载更新的章节。
5、程序结束后打印下载表单,显示下载或更新了那些漫画。"""
import os,time,re,pprint
import my_csv_module as cv
from selenium import webdriver
from urllib import request
#从manhuafen_down_link.csv 文件中读取动漫链接
c = 'manhuafen_down_link.csv'
a = 2
b = 4
link_list = cv.csv_read_row_write_list(c,a,b) #读取文件‘c’中的2-4行存到列表 link_list
update_list = {
} #创建用于储存下载表单的字典
#开始遍历列表依次下载列表中的漫画
for row in link_list:
comic_name = row[0] #漫画名
name_lin = str(row[1]) #漫画目录首页链接
latest_lin = str(row[2]) #当前漫画的最新下载进度的链接
os.makedirs(comic_name,exist_ok=True) #创建要下载漫画的文件夹
name_nums = len(os.listdir('.\%s' %(comic_name))