Scrapy-多层爬取天堂图片网

 

   1.根据图片分类对爬取的图片进行分类

Scrapy-多层爬取天堂图片网

    开发者选项 --> 找到分类地址

Scrapy-多层爬取天堂图片网

          爬取每个分类的地址通过回调函数传入下一层


name = 'sky'
start_urls = ['http://ivsky.com/']

def parse(self, response):

selector = Selector(response)
# print(response.text)
types = selector.xpath("//div[@class='kw']/a")
for type in types:
typeUrl = type.xpath("@href").extract()[0]    #分类地址
typeName = type.xpath("text()").extract()[0]   #分类名称
# print(typeUrl+" "+typeName)
yield Request(self.start_urls[0]+typeUrl,callback=self.parseTotalPage,meta={'typeName':typeName})

   2.点击进入一个类型 --> 开发者选项 --> 找到分页代码段

Scrapy-多层爬取天堂图片网

      爬取每一个分页的地址也是通过回调函数传入下一层进行处理

    def parseTotalPage(self,response):

        typeName = response.meta["typeName"]
        # print(typeName)
        selector = Selector(response)
        # print(response.text)
        pageList = selector.xpath("//div[@class='pagelist']//a//@href").extract() #每一页的地址
        for page in pageList:
            yield Request(self.start_urls[0]+page,callback=self.parseGetImg,meta={'typeName':typeName})

   3.获取一类图地址 --> 开发者选项 --> 找到相同类图的地址

     Scrapy-多层爬取天堂图片网

    爬取这类图的地址通过回调函数传入下一层进行处理

def parseGetImg(self,response):

typeName = response.meta["typeName"]
selector = Selector(response)
imgs = selector.xpath("//div[@class='il_img']//a")
for img in imgs:
imgUrl = img.xpath("@href").extract()[0]  #一类图的地址
# print(imgUrl+" "+imgName)
yield Request(self.start_urls[0]+imgUrl,callback=self.parseGetMoreImg)

 

   4.查看每张图片的html代码 --> 找到图片的地址

   Scrapy-多层爬取天堂图片网

    爬取每张图的地址

 def parseGetMoreImg(self,response):
        # / html / body / div[3] / div[4] / ul / li[3] / div / a / img
        selector = Selector(response)
        # print(response.text)
        items = IvskyItem()
        items["imgName"] = response.meta["imgName"]
        items["imgUrl"] = selector.xpath("//div[@class='il_img']//a//img//@src").extract()
        # print(items)
        yield items

 

 

 最后将图片传入pipelines.py 进行下载处理,要先在setting.py 设置,否则无法进入pipelines.py

ITEM_PIPELINES = {
   'ivsky.pipelines.IvskyPipeline': 300,
}

 代码地址:https://github.com/WitW/ivsky

相关文章:

  • 2021-12-15
  • 2021-10-20
  • 2021-06-16
  • 2021-08-20
  • 2021-07-17
  • 2021-04-11
  • 2021-11-10
猜你喜欢
  • 2021-11-24
  • 2021-10-06
  • 2022-12-23
  • 2021-08-10
  • 2021-06-17
  • 2021-07-01
  • 2022-12-23
相关资源
相似解决方案