python初学爬虫项目一:如何利用requests和selenium模块自动爬取漫画网站的整部漫画?

本文介绍了一个Python初学者的爬虫项目,详细讲述了如何使用requests和selenium模块抓取漫画粉网站上的漫画。项目包括读取CSV文件获取漫画链接,比较已下载与总章节判断更新,下载漫画图片并保存,以及使用循环和条件判断实现漫画的连续下载。源代码包含注释,涉及Python基础及模块应用。
摘要由CSDN通过智能技术生成

萌新的Python爬虫项目一:如何利用requests和selenium模块自动爬取漫画网站的整部漫画?

项目介绍

作为初学 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文件读取和写入、正则表达式、requestsselenium模块的基本语句用法等。我的参考书《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))
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值