2019-11-03  138 views 11

使用scrapy爬取动态漫画站

温馨提示:本文共计1161个字,预计阅读时间需要4分钟。

scrapy爬取动态漫画

前段时间特别迷港漫,尤其牛佬的作品个人很喜欢。

搜到某网站几乎都是港台漫画,于是想用爬虫抓下来慢慢看。

奈何是个动态站点,图片地址都用 js 加密过,记录下爬取过程。

爬虫部分代码解析

1.1:章节获取

查看网站源代码,找不到章节名称关键字,F12 分析,确定章节内容为 ajax 提交完成。

交互采用 post 方式进行,scrapy 中可使用 FormRequest 完成提交动作。

Post 过程中 header 必须存在三个值,需自定义,代码如下:

1.2:章节解析

返回内容为标准的 json 值,采用 json.loads 转换为 dict。(开头需 import json)

用 for 循环放入到 scrapy 的 item 中,此时得到章节所有详细页面地址,用 request 继续深入访问。

1.3:图片源地址获取

此时出现本次爬取最大难点,进入章节第一页后,固然无法通过右键获取到图片地址,F12 发现仍然为动态提交表单后获得,表单内容中有个 key 值不知从何而来。

scrapy提交post表单

求助 @喵喵 后得知 key 是每次 get 请求页面时,随页面返回,此为随机值,故直接用正则找关键字截取字符串(开头需 import re),得到 key 后仍然使用 scrapy.FormRequest 完成表单提交。

1.4:图片地址解密

返回是 eval 开头的加密 js,python 中使用 PyExecJS 库即可,解密后得到真实地址,放入 item,再返回丢给 pipelines 开始下载。

1.5:循环 POST 分页

搞定第一页,还得继续循环后面的分页,回调函数 parsepage,需重新定义 item 值,不然 link_url 传值会有问题。

最后的成果

害怕源站被爬坏,代码内用 xxxxx 替代部分内容,这次的爬虫真心学习到不少东西,也是博主第一次使用 scrapy 框架完成的首个爬虫,虽然网上一堆教程,但都主要针对静态网站,这样的动态交互爬取把我折磨了好几个晚上。

上个单章爬取成功的图:

章节成功爬取

为什么代码没有完全分享出来,也是因为存在较大 bug,这样来回动态多线程交互的过程中偶尔会出现空值,空闲时间再研究解决(有个想法是检测为空后再重复 get 和 post 一次)。

爬虫BUG

感谢

最后特别感谢 @喵喵,几次卡壳的时候都是他给了我继续前行探索的动力。

此次爬虫也是对 Getpics 脚本的一次升华,年初立下用 python 写出一个实例的 flag 算是做得不错,感谢自己的坚持。


11 月试产要来了,得花大部分工作时间重新编写测试脚本,到时遇到有意思的再到博客记录吧。

-End-

11 条评论  访客:7 条  作者:4 条

  1. 点滴记录

    分析到位~nice!

  2. 夏天烤洋芋

    :lol: 被你爬的漫画网站真倒霉。哈哈哈哈 :grin:

    • Sam.Z GM

      @夏天烤洋芋 :grin: 爬漫画是基本,空了哪天去爬个套图站,然后做个卖图包的微信群,也~~ 产业链出来了

  3. 响石潭 LV2

    这个爬虫威力好大,如入无人之境

  4. 从良未遂

    就喜欢你们这些有技术的 :mrgreen:

  5. 云中君

    爬漫画,这个我喜欢!

  6. 野生的喵喵 LV1

    :mrgreen: :mrgreen: 这站点漫画不错 :cool: ,就是现在没法静下来看 :evil:

  7. 武汉空调维修

    真羡慕,还在学习中

给我留言

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: