爬取鼠绘网一拳超人

前置知识:python基础语法

python版本:python3.7.1

使用工具:PyCharm Chrome

主要使用的python模块: 1.urllib 2.selenium 3.json 4.re 5.os

可以通过 我的github主页 获取源码

以下内容仅供学习使用


以爬取漫画一拳超人为例

  1. 获取每一话的URL并下载到本地
  2. 获取所有图片的URL并下载到本地
  3. 依次下载所有图片到本地
  4. 下述所有代码默认已经

问题分析

首先通过Chrome浏览器进入一拳超人漫画首页 ,首先查看网页源代码,发现网页是动态加载的,所以之前通过直接获取源代码再提取出目标URL的方法失效了。因此我们需要使用python的一个第三方模块selenium,请自行pip安装。这里给出selenium的官方文档。下载相应的浏览器的驱动时注意与浏览器版本对应且确保浏览器的驱动安装在python虚拟环境的Scripts文件夹下

通过selenium打开浏览器进入一拳超人首页,通过find_elements_by_css_selector和find_elements_by_class_name方法定位到相应的按钮,点击后将每一话的URL下载到本地

py_2_1

获取了每一话的URL后,发现每一话的内容同样是动态加载的,但是通过Chrome的开发者工具的Network -> XHR -> Headers我们发现了下图中划红线部分的URLpy_2_2

打开https://prod-api.ishuhui.com/comics/detail?id=6775我们可以看到一堆如下图的URL

py_2_3

再打开其中的URL,发现这就是这一话所有图片的URL!那么一切都变的简单了,只要获取https://prod-api.ishuhui.com/comics/detail?id=6775id部分的取值,我们就找到了包含每一话所有图片链接的URL。

下述所有代码默认的文件结构(W磁盘下有漫画,尾缀,URL三个文件夹)

--W:
 |--漫画
 |--尾缀
 |--URL

获取每一话的对应的id取值

下述代码的中心思想就是

  1. 通过selenium模块自动打开对应漫画的URL主页
  2. 使用find_elements_by_css_selector先定位到页码导航栏的整体位置和find_elements_by_class_name定位到每一个按钮。
  3. 然后通过click方法点击按钮,使用page_source方法获取源代码(已经动态加载好的)。
  4. 最后通过re.findall方法将其中的URL提取出来

运行后漫画每一话的URL保存在W:\漫画\尾缀\一拳超人.txt

获取所有图片的URL

获取所有图片的URL以及相关信息方便后续

运行程序所有图片的URL保存到W:\漫画\URL\一拳超人URL.txt

下载所有图片到本地

到这里离成功只差一步了:从所有图片URL下载图片到本地。但这里存在几个问题

  1. 保存在一拳超人URL.txt中的除了图片的URL还有其他信息
    py_2_4在处理过程中,可能出现URL无法正常打开,为了使程序正常运行,下述程序在无法打开图片URL时会记录下相应的数据,并继续执行
  2. 若程序中途出现其他错误,异常退出,调试后重新运行。为了避免重复下载已经下载好的图片,下述程序通过os.path.exists方法判断图片不存在时再下载

运行程序,所有图片保存在W:\漫画\一拳超人

一键下载漫画到本地

下述get_all_url函数在get_total_url.py内

get_all_img_url函数在get_imgs_url.py内

get_imgs函数在get_imgs.py内

且所有.py文件在同一目录下

最后展示一下部分结果

py_2_6

编辑于2018-11-23 17:48:42

浙ICP备18050335号