如何采集京东搜索页面商品的销量、价格数据?
在本文中,我们将介绍如何使用Python语言和相关库来采集京东搜索页面商品的销量、价格数据。这个项目案例适合运营京东店铺的商家,或者对京东商品数据分析感兴趣的人群。
项目流程
本项目的流程如下:
- 获取京东搜索页面的HTML代码
- 解析HTML代码,提取商品信息
- 获取商品的销量和价格等数据
- 存储数据并进行分析和可视化
在下面的步骤中,我们将逐步实现这个流程。
步骤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小时的技术支持和服务。