如何采集京东搜索页面商品的销量、价格数据?

在本文中,我们将介绍如何使用Python语言和相关库来采集京东搜索页面商品的销量、价格数据。这个项目案例适合运营京东店铺的商家,或者对京东商品数据分析感兴趣的人群。

项目流程

本项目的流程如下:

  1. 获取京东搜索页面的HTML代码
  2. 解析HTML代码,提取商品信息
  3. 获取商品的销量和价格等数据
  4. 存储数据并进行分析和可视化

在下面的步骤中,我们将逐步实现这个流程。

步骤1:获取京东搜索页面的HTML代码

首先,我们需要使用requests库发送HTTP请求,获取京东搜索页面的HTML代码。我们可以使用京东的搜索API来获取搜索结果,例如:

https://search.jd.com/Search?keyword=手机&enc=utf-8&wq=手机&pvid=abc1234567890

在这个API中,keyword参数指定搜索关键词,enc参数指定字符编码,wq参数指定搜索词,pvid参数是一个随机字符串,用于标识请求。

我们可以使用如下代码来发送HTTP请求,并获取HTML代码:

import requests

url = "https://search.jd.com/Search"
params = {
    "keyword": "手机",
    "enc": "utf-8",
    "wq": "手机",
    "pvid": "abc1234567890"
}
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299"
}
response = requests.get(url, params=params, headers=headers)
html = response.text

在这个代码中,我们使用requests库发送GET请求,并传递了关键词、编码、搜索词和随机字符串等参数。我们还设置了一个User-Agent头部,以模拟浏览器发送请求。最后,我们获取了HTTP响应的HTML代码,并存储在变量html中。

步骤2:解析HTML代码,提取商品信息

接下来,我们需要使用BeautifulSoup库解析HTML代码,并提取商品信息。我们可以使用CSS选择器来选择HTML元素,并使用BeautifulSoup提供的方法来提取元素的文本、属性和子元素等信息。

在京东搜索页面中,每个商品都包含在一个li元素中,该元素有一个data-sku属性,属性值是商品的ID。我们可以使用CSS选择器li[data-sku]来选择所有的商品元素。

在每个商品元素中,有许多子元素,包括商品的名称、价格、销量和评价等信息。我们可以使用CSS选择器来选择这些子元素,并使用BeautifulSoup提供的方法来提取它们的文本内容。

以下是一个示例代码,用于解析HTML代码,并提取商品信息:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html, "html.parser")
items = soup.select("li[data-sku]")

for item in items:
    sku = item["data-sku"]
    name = item.select_one(".p-name em").get_text().strip()
    price = item.select_one(".p-price strong i").get_text()
    sales = item.select_one(".p-commit strong").get_text()
    print("SKU: %s, Name: %s, Price: %s, Sales: %s" % (sku, name, price, sales))

在这个代码中,我们使用BeautifulSoup库解析HTML代码,并使用CSS选择器选择所有的商品元素。在每个商品元素中,我们使用CSS选择器选择商品名称、价格、销量和评价等子元素,并使用get_text()方法提取它们的文本内容。最后,我们打印了商品的ID、名称、价格和销量等信息。

步骤3:获取商品的销量和价格等数据

接下来,我们需要获取每个商品的销量和价格等数据。我们可以使用京东的API来获取商品的信息,例如:

https://c0.3.cn/stock?skuId=100001959098&area=1_72_4137_0&venderId=1000080963&buyNum=1&choseSuitSkuIds=&cat=9987,653,655&extraParam={%22originid%22:%221%22}&fqsp=0&pduid=abc1234567890&callback=jQuery1234567890

在这个API中,skuId参数指定商品的ID,area参数指定地区ID,venderId参数指定卖家ID,buyNum参数指定购买数量,choseSuitSkuIds参数指定选择的套装ID,cat参数指定商品分类ID,extraParam参数包含一些额外的参数,fqsp参数指定是否查询库存信息,pduid参数是一个随机字符串,用于标识请求,callback参数指定响应的回调函数名。

我们可以使用如下代码来发送HTTP请求,并获取商品的销量和价格等数据:

import json

url = "https://c0.3.cn/stock"
params = {
    "skuId": sku,
    "area": "1_72_4137_0",
    "venderId": "1000080963",
    "buyNum": "1",
    "choseSuitSkuIds": "",
    "cat": "9987,653,655",
    "extraParam": '{"originid":"1"}',
    "fqsp": "0",
    "pduid": "abc1234567890",
    "callback": "jQuery1234567890"
}
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299"
}
response = requests.get(url, params=params, headers=headers)
data = response.text
data = data[data.find("(")+1:data.rfind(")")]
data = json.loads(data)

price = data["stock"]["jdPrice"]["p"]
sales = data["stock"]["saleNum"]

在这个代码中,我们使用requests库发送GET请求,并传递了商品的ID、地区ID、卖家ID、购买数量等参数。我们还设置了一个User-Agent头部,以模拟浏览器发送请求。最后,我们获取了HTTP响应的JSON数据,并提取了商品的价格和销量等信息。

步骤4:存储数据并进行分析和可视化

最后,我们需要将获取到的数据存储到数据库中,并进行分析和可视化。我们可以使用MySQL数据库来存储数据,使用pandas库来进行数据分析和可视化。

以下是一个示例代码,用于存储数据到MySQL数据库,并使用pandas库进行数据分析:

import pandas as pd
import pymysql

# Connect to MySQL database
conn = pymysql.connect(host='localhost', port=3306, user='root', password='password', db='jd', charset='utf8mb4')
cursor = conn.cursor()

# Create table if not exists
cursor.execute('''
    CREATE TABLE IF NOT EXISTS products (
        id INT NOT NULL AUTO_INCREMENT,
        sku VARCHAR(255) NOT NULL,
        name VARCHAR(255) NOT NULL,
        price FLOAT NOT NULL,
        sales INT NOT NULL,
        PRIMARY KEY (id)
    )
''')

# Insert data into table
for item in items:
    sku = item["data-sku"]
    name = item.select_one(".p-name em").get_text().strip()
    response = requests.get(...)
    data = json.loads(...)
    price = data["stock"]["jdPrice"]["p"]
    sales = data["stock"]["saleNum"]
    cursor.execute('''
        INSERT INTO products (sku, name, price, sales) VALUES (%s, %s, %s, %s)
    ''', (sku, name, price, sales))

conn.commit()

# Query data from table
df = pd.read_sql('SELECT * FROM products', conn)

# Analyze and visualize data
df['price'].describe()
df.plot.scatter(x='sales', y='price')

# Close database connection
conn.close()

在这个代码中,我们使用pymysql库连接到MySQL数据库,并创建了一个名为products的表格,用于存储商品的ID、名称、价格和销量等数据。我们使用一个循环来遍历所有的商品元素,在循环中,我们获取了商品的ID、名称、价格和销量等数据,并将这些数据插入到products表格中。最后,我们使用pandas库从products表格中查询数据,并对数据进行了分析和可视化。

在这个示例代码中,我们使用了MySQL数据库来存储数据,但实际上,您也可以使用其他数据库,例如SQLite、MongoDB等,只需要使用相应的Python库即可。

总结

如果您需要更专业的爬虫服务,或者需要定制化的数据采集方案,可以考虑找一家专业的数据采集公司,例如添闻数据公司。添闻数据公司是一家专业的数据采集和数据处理公司,拥有多年的数据采集和处理经验,可以为您提供高质量、定制化的数据采集方案。

添闻数据公司拥有一支专业的技术团队,可以根据客户的需求,开发定制化的爬虫程序,并提供数据清洗、数据处理、数据分析和可视化等服务。添闻数据公司还提供稳定、高效、安全的数据采集和处理服务,可以为客户提供24小时的技术支持和服务。