Python3~scrapy项目之下载网页图片

40 篇文章 0 订阅
11 篇文章 0 订阅
本文介绍了一个Python3 Scrapy项目,用于从lanrentuku.com网站下载花卉类别的图片。首先设置起始URL,然后解析网页,通过XPath提取图片链接。接着,对于每个图片链接,发起新的请求到详情页,再次解析获取大图URL,并进行下载操作。最后,创建目录保存图片,实现了批量下载的功能。
摘要由CSDN通过智能技术生成
# -*- coding: utf-8 -*-
import scrapy,re,os
from PY_2018_03_17.items import TuKuItem
from urllib import request

class TukuSpider(scrapy.Spider):
    name = 'tuku'
    allowed_domains = ['lanrentuku.com']
    start_urls = []
    base_url='http://lanrentuku.com/vector/flower/p%s.html'
    for page in range(1,2):
        start_urls.append(base_url%page)

    def parse(self, response):

        item=TuKuItem()
        #检测是否可以访问网站
        # paths=response.url.split('/')
        # with open('paths[-1]','w',encoding='utf-8') as f:
        #     f.write(response.body.decode('gb2312'))
        #     print('~~~~~~~~~~~~~~')
        dd_list=response.xpath('//div[@class="list-pic"]/dl/dd')
        # print(dd_list)#列表
        #疑问:dd_list加上.extract()是字符串,不带.extract()是selector生成器
        # print('!!!!!!!!!!!!1')
        # count=1
        for dd in dd_list:
            src=dd.xpath('./a/img/@src').extract()
            # print(src)#列表
        #拿取缩略图src
            # if src!=[]:
            #     print(src[0])
            # print(count)
            # count +=1

            #正则
            # pattern=re.compile(r'<img.*src="(.*?)"')
            # src=pattern.findall(dd)
            # if src!=[]:
            #     print(src)

        #详情页大图-href
            href=dd.xpath('./a/@href').extract()
            if href!=[]:
                href=request.urljoin(response.url,href[0])
                # print(href)
                yield scrapy.Request(url=href,callback=self.detail_page,meta={'data':item})

    def detail_page(self,response):
        #详情页的页面
        item=response.meta['data']
        img=response.xpath('//div[@class="content-a"]/p/img/@src').extract()
        if img!=[]:
            img=img[0]
            print(img)

        #下载详情图片
        yield scrapy.Request(url=img,callback=self.download,meta={'data':item})

    def download(self,response):
        item = response.meta['data']
        root_dir = 'tuku_img'
        if not os.path.exists(root_dir):
            os.mkdir(root_dir)

        paths=response.url.split('/')[-1]
        filename=root_dir+'/'+paths

        with open(filename,'wb') as f:
            f.write(response.body)
        f.close()
        yield item

#下载完第一页后点击下一页有两种方法:
#1、接口方式
#2、selenium\phantomjs
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值