京东热卖手机信息抓取实战:运用 Scrapy 获取品牌、价格、参数等信息

本教程将使用 Scrapy 框架抓取京东热卖手机信息,包括品牌、价格、评价数量、是否自营以及详细参数信息。并进行去重处理,最终将数据保存为 Excel 文件。

1. 环境准备

  • Python 3.x
  • Scrapy 框架
  • Pandas 库
  • Selenium 库
  • BeautifulSoup 库

2. 代码实现

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
import pandas as pd

# 定义要抓取的三个品牌
brands = ['Apple', '华为', '小米']

# 设置浏览器
browser = webdriver.Chrome()
browser.maximize_window()  # 窗口最大化

# 打开京东手机热销页面
url = 'https://list.jd.com/list.html?cat=9987,653,655'
browser.get(url)

# 点击筛选条件中的“自营”选项
self_support = browser.find_element_by_xpath('//div[@id="J_selector"]/div[3]/div[2]/div[1]/a')
ActionChains(browser).move_to_element(self_support).click().perform()

# 定义空列表,用于保存抓取的信息
phone_list = []

# 循环遍历每个品牌
for brand in brands:
    # 输入品牌名称,进行搜索
    search_input = browser.find_element_by_id('key')
    search_input.clear()
    search_input.send_keys(brand)
    search_btn = browser.find_element_by_class_name('button')
    search_btn.click()

    # 等待页面加载完全
    wait = WebDriverWait(browser, 10)
    wait.until(EC.presence_of_element_located((By.ID, 'J_goodsList')))

    # 解析页面源代码,获取手机信息
    soup = BeautifulSoup(browser.page_source, 'html.parser')
    phone_items = soup.find_all('li', class_='gl-item')
    for item in phone_items:
        name = item.find('div', class_='p-name').text.strip()
        price = item.find('div', class_='p-price').find('i').text
        eval_num = item.find('div', class_='p-commit').find('a').text.strip('条评价')
        self_support = True if item.find('div', class_='p-icons').find('i', class_='goods-icons-self-support') else False
        phone = {'品牌': brand, '名称': name, '价格': price, '评价数量': eval_num, '自营': self_support}
        phone_list.append(phone)

# 关闭浏览器
browser.quit()

# 将抓取的信息转换为DataFrame格式,进行去重
df = pd.DataFrame(phone_list)
df.drop_duplicates(subset=['品牌', '名称'], inplace=True)

# 重新设置索引
df.reset_index(drop=True, inplace=True)

# 定义空列表,用于保存手机参数信息
params_list = []

# 循环遍历每个手机,获取详细参数信息
for i in range(len(df)):
    # 打开手机详情页面
    url = 'https:' + soup.select('li.gl-item div.p-name a')[i]['href']
    browser = webdriver.Chrome()
    browser.get(url)

    # 等待页面加载完全
    wait = WebDriverWait(browser, 10)
    wait.until(EC.presence_of_element_located((By.ID, 'detail')))

    # 解析页面源代码,获取手机参数信息
    soup = BeautifulSoup(browser.page_source, 'html.parser')
    params = soup.find('div', id='parameter2').find_all('li')
    param_dict = {}
    for param in params:
        param_list = param.text.strip().split(':')
        if len(param_list) == 2:
            param_dict[param_list[0]] = param_list[1]
    params_list.append(param_dict)

    # 关闭浏览器
    browser.quit()

# 将手机参数信息转换为DataFrame格式,与手机信息进行合并
params_df = pd.DataFrame(params_list)
result = pd.concat([df, params_df], axis=1)

# 将结果保存为excel文件
result.to_excel('phones.xlsx', index=False)

3. 运行结果

运行代码后,将在当前目录下生成一个名为 phones.xlsx 的 Excel 文件,包含所有抓取到的手机信息和详细参数。

4. 注意事项

  • 京东网站的反爬措施比较强,需要使用 Selenium 模拟浏览器操作来获取网页源代码。
  • 网页加载需要时间,需要加入等待时间,以保证网页完全加载后再进行解析。
  • 由于网站页面结构可能发生变化,需要根据实际情况调整代码。

5. 总结

本教程介绍了如何使用 Scrapy 框架抓取京东热卖手机信息,并进行去重处理,最终将数据保存为 Excel 文件。通过学习本教程,您可以掌握基本的网页抓取技术,并将其应用于其他数据采集任务。

京东热卖手机信息抓取实战:运用 Scrapy 获取品牌、价格、参数等信息

原文地址: https://www.cveoy.top/t/topic/ol7g 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录