下面会详细讲解使用Python爬取618当天某东热门商品销量数据的完整攻略。
环境准备
在开始之前,我们需要准备以下环境:
- Python 3.x
- PyCharm等IDE(可选)
- Python第三方库requests、BeautifulSoup、pandas
其中requests用于请求数据,BeautifulSoup用于解析HTML页面,pandas用于存储数据。我们可以通过pip命令安装这些库:
pip install requests
pip install beautifulsoup4
pip install pandas
获取页面数据
首先,我们可以通过浏览器访问某东618活动页面,观察页面结构和URL规律。可以发现,每个商品的销量数据都在这样的URL中:https://c0.3.cn/stock?skuId={}&area=1_72_4137_0&venderId=1000000127&cat=1319,1525,7050&buyNum=1&choseSuitSkuIds=&extraParam={{"originid":"1"}}
这里的skuId
和venderId
可以在商品页面的URL中找到,area
则表示地区编号,这里选择的是北京地区的编号。我们可以使用requests库请求数据,将skuId
和venderId
参数填入URL中,然后发起请求:
import requests
def get_sales(sku_id, vender_id):
url_sku = 'https://c0.3.cn/stock?skuId={}&area=1_72_4137_0&venderId={}&cat=1319,1525,7050&buyNum=1&choseSuitSkuIds=&extraParam={{"originid":"1"}}'.format(sku_id, vender_id)
r_sku = requests.get(url_sku)
data_sku = r_sku.json()
sales = data_sku['stock']['skuCore']['sku2info'][sku_id]['销售状态']['joinCount']
return sales
这段代码中,我们使用了requests库的get方法请求了URL,将返回的json数据传给了data_sku变量。接着,我们从json数据中解析出销量数据,并返回它。
解析HTML页面
我们需要在活动页面中解析出商品的ID和销量数据。使用开发者工具观察活动页面结构,可以发现每个商品都被包含在一个<div>
元素中,而且它们的类名都是item
。
我们可以使用BeautifulSoup库来解析HTML页面,然后使用列表推导式依次获取每个商品的ID和销量数据。以下是示例代码:
from bs4 import BeautifulSoup
def get_product_sales(soup):
item_list = soup.find_all('div', {'class': 'item'})
info_list = [(item.find('div', {'class': 'p-name'}).a['href'], item.find('div', {'class': 'p-name'}).a.text.strip(), get_sales(item['data-sku'], item['data-venderid'])) for item in item_list]
return info_list
这段代码中,我们使用了find_all方法获取了所有的商品元素,然后使用find方法获取商品页面URL和名称,最后将data-sku
和data-venderid
传给前面的get_sales
函数,获取销量数据。最后将商品ID、名称和销量数据封装为元组,存储到一个列表中。
存储数据
获取销量数据后,我们还需要将它们存储到文件中。这里我们使用pandas库来处理数据,先将数据存储到DataFrame中,然后将DataFrame写入文件。以下是示例代码:
import pandas as pd
def save_data(info_list, filename):
df = pd.DataFrame(info_list, columns=['url', 'name', 'sales'])
df.to_csv(filename, index=False)
这里我们使用了DataFrame的构造方法将数据存储到DataFrame中,并设置了列名。然后使用to_csv方法将DataFrame写入文件中。
完整代码
下面是完整的代码示例:
import requests
from bs4 import BeautifulSoup
import pandas as pd
def get_sales(sku_id, vender_id):
url_sku = 'https://c0.3.cn/stock?skuId={}&area=1_72_4137_0&venderId={}&cat=1319,1525,7050&buyNum=1&choseSuitSkuIds=&extraParam={{"originid":"1"}}'.format(sku_id, vender_id)
r_sku = requests.get(url_sku)
data_sku = r_sku.json()
sales = data_sku['stock']['skuCore']['sku2info'][sku_id]['销售状态']['joinCount']
return sales
def get_product_sales(soup):
item_list = soup.find_all('div', {'class': 'item'})
info_list = [(item.find('div', {'class': 'p-name'}).a['href'], item.find('div', {'class': 'p-name'}).a.text.strip(), get_sales(item['data-sku'], item['data-venderid'])) for item in item_list]
return info_list
def save_data(info_list, filename):
df = pd.DataFrame(info_list, columns=['url', 'name', 'sales'])
df.to_csv(filename, index=False)
if __name__ == '__main__':
url = 'https://sale.jd.com/act/iFtgYFy7YjMyx.html'
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
info_list = get_product_sales(soup)
save_data(info_list, 'sales.csv')
这段代码中,我们首先使用requests库请求了活动页面,然后使用BeautifulSoup库解析页面数据,调用get_product_sales函数获取销量数据,最后使用save_data函数存储数据到文件中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用Python爬取618当天某东热门商品销量数据,看看大家喜欢什么! - Python技术站