爬虫项目(斗图啦scrapy)

斗图啦网址
https://www.doutula.com/photo/list/
(1)分析网站 得到图片的地址
在这里插入图片描述
(2)进入得到的网址分析
在这里插入图片描述

在这里插入图片描述
(3)编写项目代码
(4)scrapy爬取,源码
items.py

import scrapy


class DoutubaItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    name = scrapy.Field()
    link = scrapy.Field()

settings.py

ROBOTSTXT_OBEY = False
ITEM_PIPELINES = {
    #'doutuba.pipelines.DoutubaPipeline': 300,
    'doutuba.pipelines.DoutuImgPipeline': 300,
}
IMAGES_STORE = 'images'  #图片的地址  当前文件夹

pipeline.py

class DoutuImgPipeline(ImagesPipeline):
    def get_media_requests(self, item, info):
        yield scrapy.Request(url=item["link"],  meta={'item': item})

    def file_path(self, request, response=None, info=None):
        item = request.meta['item']
        path = item['name'] + '.jpg'
        return path

spider.py

import scrapy
from doutuba.items import DoutubaItem

class DoutuSpider(scrapy.Spider):
    name = 'doutu'
    allowed_domains = ['doutula.com']
    offset = 1
    start_urls = ['https://www.doutula.com/photo/list/']

    def parse(self, response):
        img_srcs = response.xpath('//*[@id="pic-detail"]/div/div[2]/div[2]/ul/li/div/div/a/@href').extract()
        for link in img_srcs:
            yield scrapy.Request(link, callback=self.getNew)
        self.offset += 1
        url = "https://www.doutula.com/photo/list/?page=" + str(self.offset)
        yield scrapy.Request(url, callback=self.parse)
    def getNew(self, response):
        item = DoutubaItem()
        name = response.xpath('//*[@id="detail"]/div/div[2]/li/div[1]/h1/a/text()').extract()
        img_src = response.xpath('//*[@id="detail"]/div/div[2]/li/div[2]/div/div/div/div/table/tbody/tr[1]/td/img/@src').extract()
        item["name"] = name[0]
        item["link"] = img_src[0]
        yield item

(5)效果图
在这里插入图片描述
如有错误,多多指教

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值