scrapy基础学习-商品信息抓取

news/2024/7/19 11:39:09 标签: python, scrapy, 爬虫

scrapy_0">熟悉scrapy基本操作

  1. 开始你的项目
    scrapy startproject xxx
  2. 然后他是这个样子的
    xxx                           项目目录
        -- xxx                    项目模块
        -- scrapy.cfg         项目部署配置文件
        -- __init__.py
        -- items.py            item定义,用来定义爬虫结构,不晓得可以用文件不,管理多个爬虫结构
        -- middlewares.py  定义爬取的中间件
        -- pipelines.py     定义数据管道
        -- settings.py        配置文件
        -- spiders              放置spider的文件夹,即具体爬虫代码
    
  3. 创建你的spider
    scrapy genspider xxx_1 xxx_1.com
    xxx_1: 你的spider名称,执行爬虫的时候的唯一标识
    xxx_1.com: 你要爬取的网站的域名,可以在代码中进行修改。
  4. 你的spider是这个样子的
    首先是他的路径 xxx/xxx/spiders/xxx_1.py
    内容是这个样子滴
    python"># -*- coding: utf-8 -*-
    import scrapy
    
    from xxx_spider.items import XxxSpiderItem
    
    
    class Xxx3cSpider(scrapy.Spider):
        name = 'xxx'  # spider名称
        allowed_domains = ['xxx.com']  # 允许抓取的域名列表,如果抓取的url域名不在该列表中,则不进行抓取
        start_urls = ['https://xxx.com'] # 抓取初始页
    
        def parse(self, response):
            # 抓取逻辑
    
  5. 创建抓取结构
    编辑文件xxx/items.py
    python"># -*- coding: utf-8 -*-
    
    # Define here the models for your scraped items
    #
    # See documentation in:
    # https://docs.scrapy.org/en/latest/topics/items.html
    
    import scrapy
    class Xxx_1Item(scrapy.Item):
        item_id = scrapy.Field()              # 产品唯一编码
        link = scrapy.Field()                 # 产品连接
        category_path = scrapy.Field()        # 产品类目路径
        title = scrapy.Field()                # 产品标题
        price_min = scrapy.Field()            # 产品最低价格
        price_max = scrapy.Field()            # 产品最高价格
        price_unit = scrapy.Field()           # 产品价格单位
        main_image = scrapy.Field()           # 产品主图
    
  6. 编写抓取逻辑
    编辑文件xxx/xxx/spiders/xxx_1.py
    python"># -*- coding: utf-8 -*-
    import scrapy
    
    from xxx_spider.items import XxxSpiderItem
    
    
    class Xxx3cSpider(scrapy.Spider):
        name = 'xxx'
        allowed_domains = ['xxx.com']
        start_urls = ['https://xxx.com']
    
        # 通过css选择器,对itemd数据结构中的各个字段,进行抓取赋值
        # 属性获取方式:
        # text内容---> ::text
        # 标签属性---> ::attr(属性字段)
        # extract() 执行css解析,并返回所有匹配到的元素
        # extract_first() 执行css解析,并返回匹配到的第一个元素
        def parse(self, response):
            item_list = response.css('#mainContent ul.b-list__items_nofooter li.s-item')
            category_path = response.css('div.pagecontainer nav ol li a.b-link--tertiary::text').extract()
            print(item_list)
            for item_d in item_list:
                data = XxxSpiderItem()
                data['category_path'] = category_path
                data['item_id'] = item_d.css('div.s-item__info a.s-item__link::attr(href)').extract_first()
                data['link'] = item_d.css('div.s-item__info a.s-item__link::attr(href)').extract_first()
                data['title'] = item_d.css('div.s-item__info h3.s-item__title::text').extract_first()
                data['price_min'] = item_d.css('div.s-item__details span.s-item__price span.ITALIC::text').extract_first()
                data['price_max'] = item_d.css('div.s-item__details span.s-item__price span.ITALIC::text').extract_first()
                data['price_unit'] = item_d.css('div.s-item__details span.s-item__price span.ITALIC::text').extract_first()
                data['main_image'] = item_d.css('div.s-item__image img.s-item__image-img::attr(src)').extract_first()
                yield data
    
            # 设置下一页抓取链接
            # 这里是测试样例,所以隐藏了下一页
            # next = response.css('div.b-pagination nva.xxxui-pagination a.xxxui-pagination__control::href').extract_first()
            # yield scrapy.Request(url=next, callback=self.parse)
    
    
  7. 执行spider
    scrapy crawl xxx_1(你的spider名称)
    执行结果会输出在终端
    如下:
    你的抓取结果,根据你定义的数据结构,以json的形式展示出来
    在这里插入图片描述
    下一节涉及,抓取数据如何存储

http://www.niftyadmin.cn/n/615348.html

相关文章

scrapy基础学习-使用数据库存储MySQL

scrapy抓取的数据存储到数据库 首先修改一下pipeline路径 pipeline文件,主要是对抓取回来的数据进行处理。 在这里,我们可以对数据进行,清洗,转化,存储。 为了方便管理,我习惯将不同功能的代码&#xff0c…

django2官方文档阅读记录-用户身份验证(User authentication)

django自带的用户身份验证启动(官方文档) django本身自带有一套权限管理系统,通过该权限管理系统,我们可以方便快捷的控制用户的登录权限,访问权限。通过简单的配置,我们就可以使用django的权限管理。 编辑setting.py文件的 INS…

django错误-models.E028:::同一个表名在多个Model的db_table中使用

在meta中设置managedFalsemanaged的作用,待后续补充,源码中,会对managedtrue的model进行检测,是否有多个model使用了同一个表名。

django基础学习-权限相关整理

django权限整理 用户是权限管理的中心,django通过对用户的管理,实现了权限的控制。 group group属性类似于linux中的用户组,你可以通过给某一个组设置权限,来授权给组内所有用户,暂时还没有写代码验证具体使用方式。后…

基础环境搭建-vmtools

刚刚在虚拟机安装完成的centos7系统,下面会有提示安装vmtools,点击之后,虚拟机会自动挂载vmtools的镜像。如果没有提示,则可以在虚拟机设置->硬件设置->CD/DVD, 右侧的选择ISO镜像文件中,选中vm安装文件夹下面的…

基础环境搭建-中文输入法

1.在安装系统的时候,支持语言那里,选择支持中文,在选择简体中文,应该就会预装中文输入法 2.点击applycation->系统工具->设置->Reigon&language 3.点击输入源下面的加号 4.点击汉语 5.选择自己想要的输入法 6.然后wi…

基础环境搭建-chrome浏览器

1.chrome官网下载安装包:https://www.google.cn/intl/zh-CN/chrome/dev/ 2.使用 rpm -ivh 安装包名称,安装 3.会遇到问题: - /usr/bin/lsb_release:yum install redhat-lsb -yibXss.so.1()(64bit):yum install libXSc…

基础环境搭建-mysql数据库源码搭建

下载源码包:https://dev.mysql.com/downloads/mysql/ 官网安装教程:官网链接 groupadd mysql 创建用户组 useradd -r -g mysql -s /bin/false mysql 创建Mysql用户组下的mysql系统账号, 主要是为了系统安全 tar -xzvf mysql-VERSION.tar.gz cd mysql…