Pythonを用いたJD.comスマートフォン販売データのスクレイピング

Scrapyフレームワークを活用したJD.comのスマートフォン販売データ収集手法について解説します。

スクレイピングの基本概念

Webスクレイピングは、Webサイトから構造化データを抽出する自動化技術です。主要なプロセスは以下の通りです:

  1. DNS解決によるIPアドレス取得
  2. 対象サーバーへのHTTPリクエスト送信
  3. HTMLコンテンツの受信
  4. DOM解析によるデータ抽出

技術環境

実装に必要な環境:

  • Python 3.x
  • Scrapyフレームワーク
  • 正規表現処理モジュール

実装プロセス

1. 検索キーワードの取得

import csv

with open('mobile_brands.csv', 'r', encoding='utf-8') as file_reader:
    brand_reader = csv.reader(file_reader)
    for row in brand_reader:
        brand_name = row[0].strip()
        if brand_name:
            search_term = brand_name + ' スマートフォン'
            print(f'検索開始: {search_term}')

2. 商品情報の解析

if 'data' in response_data and 'searchm' in response_data['data']:
    for item in response_data['data']['searchm']['Paragraph']:
        product_info = {}
        content = item['Content']
        product_info['name'] = content['warename']
        product_info['shop'] = item['shop_name']
        product_info['price'] = item['dredisprice']
        product_info['product_url'] = f'https://item.jd.com/{item["wareid"]}.html'

3. 詳細仕様の抽出

import json
import re

pattern = re.compile(r'productInfo: ({.*?})')
match = pattern.search(response.text)
if match:
    spec_data = json.loads(match.group(1))
    feature_dict = {}
    for group in spec_data['data']['propGroups']:
        for attr in group['atts']:
            feature_dict[attr['attName']] = '|'.join(attr['vals'])
    return feature_dict

データベース設計

MySQLデータベースのテーブル設計例:

CREATE TABLE jd_product_data (
  product_id VARCHAR(128) PRIMARY KEY,
  keyword TEXT,
  product_data JSON
);

CREATE TABLE price_history (
  record_id VARCHAR(128) PRIMARY KEY,
  product_id VARCHAR(128),
  price_data JSON
);

実行コマンド

scrapy crawl product_crawler
scrapy crawl price_tracker

出力結果例

{
  "name": "HUAWEI P40 Pro 8GB+256GB",
  "price": "59800",
  "specs": {
    "ディスプレイ": "6.58インチOLED",
    "カメラ": "5000万画素メインカメラ",
    "バッテリー": "4200mAh"
  }
}

タグ: Scrapy データスクレイピング Python JD.com データベース設計

7月17日 00:42 投稿