阅读量:0
使用Selenium爬取京东商品数据并存储到MySQL数据库中的过程可以分为几个步骤:
1. 准备工作
安装所需库
确保你已经安装了Python环境以及以下库:
selenium
:用于自动化浏览器操作。pymysql
或mysql-connector-python
:用于连接MySQL数据库。webdriver
:如ChromeDriver,对应你的浏览器版本。
可以通过pip安装这些库:
pip install selenium pymysql
下载WebDriver
根据使用的浏览器下载对应的WebDriver,并确保其路径已添加到系统PATH中。
2. 编写代码
连接MySQL数据库
首先,你需要创建一个MySQL数据库以及表结构来存放京东商品数据。下面是一个简单的数据库连接示例:
import pymysql # 数据库连接配置 db_config = { 'host': 'localhost', 'user': 'your_username', 'password': 'your_password', 'db': 'your_database', 'charset': 'utf8mb4' } def connect_db(): return pymysql.connect(**db_config) # 创建表(如果尚未创建) def create_table(): conn = connect_db() cursor = conn.cursor() sql = """ CREATE TABLE IF NOT EXISTS jd_goods ( id INT AUTO_INCREMENT PRIMARY KEY, product_name VARCHAR(255), price DECIMAL(10, 2), link VARCHAR(255), image_url VARCHAR(255), description TEXT, timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) """ cursor.execute(sql) conn.commit() cursor.close() conn.close() create_table()
使用Selenium爬取数据
接下来,使用Selenium打开网页,定位到商品信息元素,并提取数据。
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager import time import pymysql def scrape_jd_goods(keyword): # 初始化Selenium driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) # 访问京东搜索页面 url = f'https://www.jd.com/allSort.aspx?keyword={keyword}' driver.get(url) time.sleep(3) # 等待页面加载 # 获取商品列表 goods_list = driver.find_elements(By.XPATH, '//li[@class="gl-item"]') # 存储数据到数据库 for good in goods_list: try: name = good.find_element(By.XPATH, './/div[@class="p-name"]/a/em').text price = float(good.find_element(By.XPATH, './/div[@class="p-price"]').text.replace('', '').replace('元', '').strip()) link = good.find_element(By.XPATH, './/div[@class="p-name"]/a').get_attribute('href') img_url = good.find_element(By.XPATH, './/div[@class="p-img"]/a/img').get_attribute('src') # 插入数据库 with connect_db() as conn: cursor = conn.cursor() sql = "INSERT INTO jd_goods (product_name, price, link, image_url) VALUES (%s, %s, %s, %s)" cursor.execute(sql, (name, price, link, img_url)) conn.commit() except Exception as e: print(f"Error scraping data: {e}") driver.quit() # 示例:爬取关键词“手机”的商品信息 scrape_jd_goods('手机')
注意事项
- 实际应用中可能需要处理更复杂的页面结构、分页、反爬虫策略等问题。
- 上述代码未包含错误处理的完整逻辑,实际应用时应加入异常处理提高健壮性。
- 频繁请求可能会触发京东的反爬机制,建议设置合理的延时,并遵守网站的爬虫政策。
- 考虑使用
webdriverwait
代替time.sleep()
以提高效率和稳定性。