Scrapy 爬虫实战:爬取京东商品信息并进行数据分析

2023-04-17 00:00:00 爬虫 商品信息 并进

Scrapy 是一个用于爬取网站数据的 Python 框架,它可以帮助我们快速地抓取海量的信息,并进行数据分析和处理。在本篇文章中,我们将使用 Scrapy 爬虫实战,以京东商品信息为例,来演示如何进行数据抓取和分析。

  1. Scrapy 爬虫介绍

Scrapy 是一款基于 Python 的开源网络爬虫框架,具有高效、快速、灵活等特点。它提供了一系列强大的工具,包括多线程异步处理、数据导出、数据分析、网页解析等等。Scrapy 爬虫主要包括以下组件:

  • Scrapy Engine: 引擎是整个爬虫的核心,负责调度各个组件协同工作。
  • Scheduler: 负责按照一定的策略对待爬取的 URL 进行调度处理。
  • Downloader: 负责下载网页内容,并返回给引擎进行解析。
  • Spiders: 负责通过定义 XPath 规则或正则表达式从网页中抓取数据。
  • Item Pipeline: 负责对抓取到的数据进行后续处理,如数据的清洗、存储等。
  • Middlewares: 负责处理爬虫的请求和响应,如请求重试、代理管理等操作。
  1. 爬取京东商品信息

在本示例中,我们将使用 Scrapy 爬虫框架,以京东商城为例,来抓取商品信息。整个过程分为以下几个步骤:

  • 安装 Scrapy 和相关库
  • 创建 Scrapy 项目
  • 编写 Scrapy 爬虫
  • 数据处理和存储

2.1 安装 Scrapy 和相关库

在开始之前,我们需要先安装 Scrapy 库和其他相关的库,如 pandas 和 numpy,以便后续进行数据分析和处理。可以使用以下命令安装:

pip install Scrapy pandas numpy

2.2 创建 Scrapy 项目

在安装完成 Scrapy 和相关库之后,我们需要创建一个 Scrapy 项目。可以使用以下命令创建:

scrapy startproject jdspider

执行该命令后,会自动生成 jdspider 目录,该目录下包含了 Scrapy 项目的基本结构。

2.3 编写 Scrapy 爬虫

在创建了 Scrapy 项目之后,我们需要编写 Scrapy 爬虫代码。这里以爬取 “京东手机” 为例(可根据自己的需要修改关键词),代码如下:

# -*- coding: utf-8 -*-
import scrapy
import json

class JdspiderSpider(scrapy.Spider):
    name = 'jdspider'
    allowed_domains = ['search.jd.com', 'item.jd.com']
    start_urls = ['https://search.jd.com/Search?keyword=京东手机&enc=utf-8']

    def parse(self, response):
        # 解析商品列表页面,获取商品详情页 URL
        for item in response.xpath('//*[@id="J_goodsList"]/ul/li'):
            url = item.xpath('div[@class="p-img"]/a/@href').extract_first()
            if url:
                yield scrapy.Request(url='https:' + url, callback=self.parse_item_page)

        # 解析下一页链接,继续爬取
        next_page = response.xpath('//a[@class="pn-next"]/@href')
        if next_page:
            yield scrapy.Request(url='https://search.jd.com' + next_page.extract_first(), callback=self.parse)

    def parse_item_page(self, response):
        # 解析商品详情页,获取相关信息
        item = {}
        item['product_id'] = response.url.split('/')[-1].split('.')[0]
        item['name'] = response.xpath('//div[@class="sku-name"]/text()').extract_first()
        item['brand'] = response.xpath('//a[@clstag="shangpin|keycount|product|mbNav-1"]/text()').extract_first()
        item['price'] = response.xpath('//div[@class="pri-box"]/span[@class="price J-p-{}"]/text()'
                                       '|//div[@class="dd"]/div[@class="p-price"]/span[@class="price"]/text()').extract_first()
        item['comment_num'] = response.xpath('//div[@id="comment-count"]/a/text()'
                                             '|//div[@class="comment-count clearfix"]/a/text()').extract_first()
        sku_url = 'https://p.3.cn/prices/mgets?skuIds=J_{}'.format(item['product_id'])
        yield scrapy.Request(url=sku_url, callback=self.parse_sku, meta={'item': item})

    def parse_sku(self, response):
        # 解析 SKU 价格信息
        item = response.meta['item']
        try:
            sku_dict = json.loads(response.body)
            item['sku_price'] = sku_dict[0]['p']
        except Exception as e:
            item['sku_price'] = None
        yield item

上面的代码中,我们定义了一个名为 JdspiderSpider 的爬虫,并设置了初始链接和需要爬取的站点。然后,利用 parse() 方法解析京东搜索页面的商品列表,获取每个商品的详情页 URL,并递归爬取下一页。接下来,利用 parse_item_page() 方法解析每个商品详情页,并获取所需的信息,如商品名、品牌、价格、评论数等。最后,利用 parse_sku() 方法解析商品 SKU 价格信息,并将所有信息保存在 item 数据结构中,供后续数据处理和存储。

2.4 数据处理和存储

在完成数据抓取之后,我们需要对数据进行处理和存储。这里,我们选择使用 pandas 和 numpy 库对数据进行处理,并将数据存储在 CSV 文件中。代码如下:

# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np

df = pd.read_csv('items.csv')
df.drop_duplicates('product_id', inplace=True)
df = df.dropna(subset=['name', 'brand', 'price'])

df['price'] = df['price'].apply(lambda x: float(x) if x else np.nan)
df['price'] = df['price'].fillna(df.groupby('brand')['price'].transform('mean'))

df.to_csv('jd_mobile.csv', index=False, encoding='utf-8-sig')
print('Data saved to jd_mobile.csv')

上面的代码中,我们先使用 pandas 库读取 Scrapy 爬虫爬取的数据文件 items.csv,并进行数据清洗和处理。具体来说,我们首先去除商品详情页 URL 相同的条目,然后去除数据不完整的条目(即缺失商品名、品牌、价格等信息的条目),最后对价格属性进行处理,其中缺失值使用所属品牌的平均价格进行填充。最后将处理后的数据存储在 CSV 文件中。

  1. 总结

本文从 Scrapy 爬虫介绍、京东商品信息爬取到数据处理和存储,演示了一个完整的 Scrapy 爬虫实战。在实际应用中,在数据处理和存储过程中,还可以使用图表和统计分析等方法,帮助我们更加直观和深入地了解商品信息的特征和规律。

相关文章