scrapy学习-第一天

scrapy学习案例


前言

Scrapy 是一个快速高级网络爬行和Web 刮擦框架,用于爬取网站并从其页面中提取结构化数据。它可以用于各种目的,从数据挖掘到监控和自动测试
详情可查看官方文档


一、scrapy创建项目

1.首先在自己所创建的目录下打开终端(在安装好scrapy前提下)
如下
输入以下命令scrapy startproject (项目名):

scrapy startproject scrapy_one_day

在这里插入图片描述
创建成功会在当前路径下创建一个项目

它的结构如下
在这里插入图片描述

  1. 接下来在命令行输入scrapy genspider (爬虫程序名) (爬取网页域名) :
    需要先跳到刚刚创建的项目目录中即
cd ./scrapy_one_day
scrapy genspider ivsky ivsky.com

在这里插入图片描述(记不住命令,可根据创建后的提示写,只需要修改example和 example.com )
创建成功:
在这里插入图片描述
在spider中就会生成一个爬虫程序
在这里插入图片描述
本次学习主要修改ivsky.py实现scrapy爬取图片并保存到本地。

二、代码部分

本次对天堂图片网进行爬取

1.爬取数据

代码如下(示例):

这里修改的是ivsky.py中parse方法

        # xpath选择class属性为pli节点下的li节点
        imgs = response.xpath('//ul[@class="pli"]/li')
        # 遍历数据
        for img in imgs:
            # 查找当前节点下img节点的src属性通过extract方法提取出来也可以使用get方法
            photo = img.xpath('.//img/@src').extract()
            # 当photo不为空执行保存方法
            if photo: 
                # 注意此时photo是列表形式如果不加[0]下面写的保存方法不可用
                self.save_photo(photo[0])

本次使用xpath进行选择(过程):
打开网页按F12
在这里插入图片描述
可以右击数据位置选择复制xpath,
也可以自己写(复制可能会出现查找不到内容的情况,建议自己写)
如果对自己写的没有把握可以通过xpath-helper插件进行验证(可进网盘下载,在谷歌插件中导入解压后文件所在目录即可)。
提取码:

6chu

快捷键启动

Ctrl+Shift+x

在这里插入图片描述

2.保存图片到本地

上述代码中,photo列表为图片链接

在同一个类中加入保存的方法(需要在前导入random和requests模块。
代码如下:

    def save_photo(self, urls):
        response = requests.get('https:'+str(urls))
        # 图片命名??.jpg
        file_path = '{0}{1}'.format(random.randint(0,10000), '.jpg')
        # 读取图片内容转化为二进制内容(图片储存方式为二进制
        # 因此使用content方法将源码转换为二进制,而不使用text方法)
        files = response.content
        # 因为是二进制所以写入使用wb
        with open(f'D:/ImageSpider/{file_path}', 'wb') as f:
            f.write(files)
            f.close()

在命令行输入scrapy crawl (爬虫程序名):

scrapy crawl ivsky

没有报错则执行成功

在这里插入图片描述
保存后的目录

3.完整代码

import scrapy
import requests
import random


class IvskySpider(scrapy.Spider):
    name = 'ivsky'  # 爬虫程序名称
    allowed_domains = ['ivsky.com']  # 爬取域名
    # 通过观察网站每页的情况修改代码
    start_urls = [f'http://ivsky.com/tupian/meinv_t50/index_{n}.html' for n in range(1, 12)]

    def parse(self, response):

        # xpath选择class属性为pli节点下的li节点
        imgs = response.xpath('//ul[@class="pli"]/li')
        # 遍历数据
        for img in imgs:
            # 查找当前节点下img节点的src属性通过extract方法提取出来也可以使用get方法
            photo = img.xpath('.//img/@src').extract()
            # 当photo不为空执行保存方法
            if photo:
                # 注意此时photo是列表形式如果不加[0]下面写的保存方法不可用
                self.save_photo(photo[0])

    def save_photo(self, urls):
        response = requests.get('https:'+str(urls))
        # 图片命名??.jpg
        file_path = '{0}{1}'.format(random.randint(0,10000), '.jpg')
        # 读取图片内容转化为二进制内容(图片储存方式为二进制
        # 因此使用content方法将源码转换为二进制,而不使用text方法)
        files = response.content
        # 因为是二进制所以写入使用wb
        with open(f'D:/ImageSpider/{file_path}', 'wb') as f:
            f.write(files)
            f.close()

在项目中setting.py文件中修改,可改可不改,如果出现重定向等问题则修改后再试
在这里插入图片描述


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值