从小就是个海贼迷,学了爬虫后第一个上手自己写的爬虫自然而然就想到了爬海贼的漫画。
是在scrapy框架下写的爬虫,至于scrapy框架的安装就不多说了,网上有很多的安装教程。
前提准备
进到放置文件的目录,CMD下先输入以下命令便自动生成scrapy框架文件,名为manhua_spider:
IDE中打开manhua_spider文件夹下可看到如下文件:
选择网址:
选的是风之漫画这个漫画网站(感觉很多要版权甚至被广电禁的漫画都用),找到海贼王目录下第一章的漫画网址,
http://manhua.fzdm.com/002/Vol_001/
设为爬虫文件的指定网域和开始爬取URL
在manhua_spider文件目录下打开cmd,输入以下指令,生成爬虫文件:
(此爬虫用for语句生成自动爬虫,因此在生成爬虫文件时选用basic模式)
生成的爬虫文件自动放在manhua_spider/spiders/目录下,打开文件可看到已经自动生成域名和初始URL:
分析网页:
观察后发现漫画的章节网址有两种前35个漫画章节链接,按卷分(一般一卷100页左右漫画),从第36个漫画链接开始回复正常的漫画章节数为337话:
分析网址,前35卷的网址构造为 http://manhua.fzdm.com/2/Vol_0再跟上卷数,之后的网址构造为 http://manhua.fzdm.com/2/加上章节数(从337开始)。因此在构造网址时要分开讨论:
打开一章的链接后查看网页的源代码和审查元素内容,发现源代码中找不到漫画图片的URL,而在审查元素中能找到:
主要因为审查元素看到的是现在实时性的内容(经过js的修改),而网页源代码看到的是就是最开始浏览器收到HTTP响应内容。
我使用selenium +BeautifulSoup来爬取审查元素里的漫画图片网址,下载安装selenium和bs4模块,Selenium原本是Web测试工具,在Python爬虫中,可以使用它来模拟真实浏览器对URL进行访问,Selenium支持的浏览器包括Firefox、Chrome、Opera、Edge、IE 等。在这使用Firefox,再导入bs4模块中的BeautifulSoup,Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree)。 它提供简单又常用的导航(navigating),搜索以及修改剖析树的操作。用支持的默认lxml解析器解析网页得到审查元素内容,再利用正则表达式提取到漫画图片网址。
在items.py文件中设置image_url容器作为传递与存放爬取到的漫画图片网址的参数。image_url = scrapy.Field()
在pipelines.py文件中爬取图片并设置要存放的路径。
for i in range(0,len(item["image_url"])): file="D:/爬虫/海贼王漫画/"+str(i)+".jpg" urllib.request.urlretrieve(item["image_url"][i], file)
在settings.py文件中打开pipiline:
# Configure item pipelines # See https://doc.scrapy.org/en/latest/topics/item-pipeline.html ITEM_PIPELINES = { 'manhua_spider.pipelines.ManhuaSpiderPipeline': 300, }
在爬虫文件cmd命令下输入
便开始自动爬取漫画了,爬取结果如下:
代码见:https://github.com/chencoolboy/spider