Scrapyフレームワークを活用したJD.comのスマートフォン販売データ収集手法について解説します。
スクレイピングの基本概念
Webスクレイピングは、Webサイトから構造化データを抽出する自動化技術です。主要なプロセスは以下の通りです:
- DNS解決によるIPアドレス取得
- 対象サーバーへのHTTPリクエスト送信
- HTMLコンテンツの受信
- 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"
}
}