# -*- coding: utf-8 -*-
import scrapy
# 从items中引入ImageItem数据模型类
# .当前目录 ..上级目录
from ..items import ImageItem
class IvskySpider(scrapy.Spider):
name = 'ivsky'
allowed_domains = ['ivsky.com']
start_urls = ['http://www.ivsky.com/']
# 类属性
base_url = 'http://www.ivsky.com'
def parse(self, response):
# 从response解析数据
detail_link = response.xpath('//div[@class="key_w"]/div[1]/a[2]/@href').extract_first('')
# 拼接分类的链接
detail_url = response.url.strip('/')+detail_link
print(detail_url)
# 根据url地址创建request对象
# callback参数.指定响应成功之后的回调函数,默认调用parse函数
request = scrapy.Request(
url=detail_url,
# 可以指定回调函数
callback=self.parse_categray
)
# 返回request对象
# 将request对象传递给引擎
yield request
# 解析分类页面的数据
def parse_categray(self, response):
# 解析分类中小分类链接
links = response.xpath('//ul[@class="ali"]/li/div/a')
for a in links:
# 获取a标签中的属性值
href = a.xpath('@href').extract_first('')
title = a.xpath('@title').extract_first('')
print(title,href)
# 创建并返回一个请求对象
yield scrapy.Request(
# 拼接完整地址
url=self.base_url+href,
callback=self.parse_detail
)
# 解析下一页链接
next_href = response.xpath('//a[@class="page-next"]/@href').extract_first('')
# 判断是否有下一页
if next_href:
# 返回下一页的请求
yield scrapy.Request(
url=self.base_url+next_href,
# 回调函数是当前函数本身
callback=self.parse_categray
)
# 解析每张图片的地址
def parse_detail(self, response):
# 存放的是多个img标签
imgs = response.xpath('//ul[@class="pli"]/li/div/a/img')
# for循环遍历
for img in imgs:
src = img.xpath('@src').extract_first('')
categray = img.xpath('@alt').extract_first('')
# 创建item,
item = ImageItem()
# 替换url中的/t/ 为/pre/ 得到高清图的地址
src = src.replace('/t/','/pre/')
# 保存图片的属性必须是一个列表
item['src'] = [src]
item['alt'] = categray
# 返回item,交给pipelines处理
yield item
import scrapy
# 从items中引入ImageItem数据模型类
# .当前目录 ..上级目录
from ..items import ImageItem
class IvskySpider(scrapy.Spider):
name = 'ivsky'
allowed_domains = ['ivsky.com']
start_urls = ['http://www.ivsky.com/']
# 类属性
base_url = 'http://www.ivsky.com'
def parse(self, response):
# 从response解析数据
detail_link = response.xpath('//div[@class="key_w"]/div[1]/a[2]/@href').extract_first('')
# 拼接分类的链接
detail_url = response.url.strip('/')+detail_link
print(detail_url)
# 根据url地址创建request对象
# callback参数.指定响应成功之后的回调函数,默认调用parse函数
request = scrapy.Request(
url=detail_url,
# 可以指定回调函数
callback=self.parse_categray
)
# 返回request对象
# 将request对象传递给引擎
yield request
# 解析分类页面的数据
def parse_categray(self, response):
# 解析分类中小分类链接
links = response.xpath('//ul[@class="ali"]/li/div/a')
for a in links:
# 获取a标签中的属性值
href = a.xpath('@href').extract_first('')
title = a.xpath('@title').extract_first('')
print(title,href)
# 创建并返回一个请求对象
yield scrapy.Request(
# 拼接完整地址
url=self.base_url+href,
callback=self.parse_detail
)
# 解析下一页链接
next_href = response.xpath('//a[@class="page-next"]/@href').extract_first('')
# 判断是否有下一页
if next_href:
# 返回下一页的请求
yield scrapy.Request(
url=self.base_url+next_href,
# 回调函数是当前函数本身
callback=self.parse_categray
)
# 解析每张图片的地址
def parse_detail(self, response):
# 存放的是多个img标签
imgs = response.xpath('//ul[@class="pli"]/li/div/a/img')
# for循环遍历
for img in imgs:
src = img.xpath('@src').extract_first('')
categray = img.xpath('@alt').extract_first('')
# 创建item,
item = ImageItem()
# 替换url中的/t/ 为/pre/ 得到高清图的地址
src = src.replace('/t/','/pre/')
# 保存图片的属性必须是一个列表
item['src'] = [src]
item['alt'] = categray
# 返回item,交给pipelines处理
yield item