Scrapy爬取斗破苍穹漫画

Scrapy爬取斗破苍穹漫画

文章目录

  • Scrapy爬取斗破苍穹漫画
  • 前言
  • 一、创建项目、创建爬虫
  • 二、实战
    • 1.items.py如下:
    • 2.settings.py如下:
    • 3.pipelines.py如下:
    • 4.spider.py如下:
  • 三、运行结果
  • 总结


前言

原本想爬取斗罗大陆,项目都创建好了,结果不小心点开了斗破苍穹,太好看了,没有办法便决定爬取斗破苍穹。附上爬取的网页地址:https://www.mkzhan.com/49733/

一、创建项目、创建爬虫

详细创建请参考之前博客或百度自学。
(创建一个名为douluodalu的项目)
cmd命令:scrapy startproject douluodalu
(创建一个名为spider的爬虫)
cmd命令:scrapy genspider -t basic spider mkzhan.com

二、实战

1.items.py如下:

代码如下(示例):


import scrapy


class DouluodaluItem(scrapy.Item):
	# define the fields for your item here like:
	# name = scrapy.Field()
	title = scrapy.Field()
	img = scrapy.Field()
	url = scrapy.Field()

2.settings.py如下:

代码如下(示例):
修改以下部分

# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
     
   'huaqiangu.pipelines.HuaqianguPipeline': 300,
}

3.pipelines.py如下:

这里对获得到的图片的url进行爬取,保存到本地文件夹下:

代码如下(示例):

import os
import requests
import sys


class DouluodaluPipeline:
	def process_item(self, item, spider):


		try:
			path = './{}'.format(item['title'][0])
			os.mkdir(path)#创建一个目录名是爬取的漫画章节
			#目录下保存漫画
			for j in range(len(item['img'])):
				content3 = requests.get(url=item['img'][j])
				with open(file=path + '/{}.jpg'.format(j + 1), mode='wb') as f:
					f.write(content3.content)
					f.close()
		except:
			print('已经存在相同的文件夹了,程序无法在继续进行!')
			sys.exit()

4.spider.py如下:

代码如下(示例):

import scrapy
from douluodalu.items import DouluodaluItem
import re
from scrapy.http import Request


class SpiderSpider(scrapy.Spider):
	name = 'spider'
	allowed_domains = ['mkzhan.com']
	start_urls = ['https://www.mkzhan.com/49733/']

	def parse(self, response):
		item = DouluodaluItem()
		#获取所有章节的url
		url_all = []
		for j in response.xpath("//a[@class='j-chapter-link']/@data-hreflink").extract():
			url_all.append("https://www.mkzhan.com" + j)
		url_all.reverse()#列表逆序
		item['url'] = url_all
		# print(item['title'])
		# print(item['url'])
		#进行回调函数
		for x in range(len(item['url'])):
			yield scrapy.Request(item['url'][x], callback=self.parse1)
	#获取漫画的地址和标题
	def parse1(self, response):
		item = DouluodaluItem()
		item['img'] = response.xpath("//img[@class='lazy-read']/@data-src").extract()
		item['title'] = response.xpath("//a[@class='last-crumb']/text()").extract()
		yield item
		# print(item['img'])
		# print(item['title'])


三、运行结果

Scrapy爬取斗破苍穹漫画_第1张图片

总结

最后虽然爬取漫画成功,但是运行后我觉得是比较慢的,大概等了十几分钟爬取完。
我们在使用scrapy运行爬虫的时候有两种方法。
第一种是在命令行输入:scrapy crawl 爬虫名
第二种是创建一个.py文件:(输入下面代码)

from scrapy import cmdline
cmdline.execute('scrapy crawl spider --nolog'.split())

本人之前用cmd命令已经崩溃了,强烈推荐大家使用第二种方式,简直是太舒服了。

你可能感兴趣的:(python,爬虫)