原本想爬取斗罗大陆,项目都创建好了,结果不小心点开了斗破苍穹,太好看了,没有办法便决定爬取斗破苍穹。附上爬取的网页地址:https://www.mkzhan.com/49733/
详细创建请参考之前博客或百度自学。
(创建一个名为douluodalu的项目)
cmd命令:scrapy startproject douluodalu
(创建一个名为spider的爬虫)
cmd命令:scrapy genspider -t basic spider mkzhan.com
代码如下(示例):
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()
代码如下(示例):
修改以下部分
# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
'huaqiangu.pipelines.HuaqianguPipeline': 300,
}
这里对获得到的图片的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()
代码如下(示例):
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运行爬虫的时候有两种方法。
第一种是在命令行输入:scrapy crawl 爬虫名
第二种是创建一个.py文件:(输入下面代码)
from scrapy import cmdline
cmdline.execute('scrapy crawl spider --nolog'.split())
本人之前用cmd命令已经崩溃了,强烈推荐大家使用第二种方式,简直是太舒服了。