这段代码使用了 Selenium 库来进行自动化的网页数据抓取。它通过打开 Chrome 浏览器,访问苏宁易购的 iPhone 14 搜索页面,然后模拟滚动窗口、提取数据、保存数据、点击下一页等操作来抓取商品信息。
以下是代码的主要部分解释:
- 导入所需的库和模块,包括
webdriver
、time
、By
和csv
。 - 打开一个 CSV 文件,用于存储抓取的数据。在打开文件时,使用了
'a'
模式表示追加写入,以免覆盖之前的数据。 - 创建一个 CSV writer 对象,用于写入数据行。
- 创建一个 Chrome 浏览器的 WebDriver 对象。
- 使用 WebDriver 打开指定的网址。
- 使用
execute_script
方法滚动窗口到底部,以加载更多商品信息。 - 使用
find_elements
方法根据 CSS 选择器提取商品信息的父级元素。 - 对于每个商品父级元素,使用
find_element
方法结合 CSS 选择器提取商品的价格、标题、链接、评价和店铺信息。 - 打印提取的商品信息,以便在控制台查看。
- 使用 CSV writer 对象将提取的商品信息写入 CSV 文件。
- 使用
execute_script
方法点击下一页按钮,加载并抓取下一页的数据。 - 最后,使用
input()
函数防止程序退出,以便手动终止程序。
需要注意的是,Selenium 在模拟浏览器操作时较为耗费资源,因此不适合进行大规模的数据抓取。如果需要更稳定和高效的数据抓取,可以考虑使用网络请求库(如 requests
)结合页面解析库(如 BeautifulSoup
)来进行抓取。此外,网站的页面结构可能会变化,导致选择器无法正常提取数据,需要根据实际情况进行调整。
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
import csv
f = open('su//'+'suning5.csv', mode='a', encoding='utf-8', newline='')
writer = csv.writer(f)
writer.writerow(['价格', '标题', '链接', '评价', '店铺'])
# 打开chrome浏览器
driver = webdriver.Chrome()
# 打开网址
driver.get('https://search.suning.com/iphone14/')
driver.implicitly_wait(3)
# 滚动窗口
for page in range(2):
driver.execute_script('document.querySelector("body > div.ng-footer > div.ng-s-footer").scrollIntoView()')
time.sleep(2)
# 提取数据
divs = driver.find_elements(By.CSS_SELECTOR, '.product-box')
for div in divs:
price = div.find_element(By.CSS_SELECTOR, '.price-box').text
title = div.find_element(By.CSS_SELECTOR, '.title-selling-point').text
href = div.find_element(By.CSS_SELECTOR, '.title-selling-point a').get_attribute('href')
evaluate = div.find_element(By.CSS_SELECTOR, '.info-evaluate').text
store = div.find_element(By.CSS_SELECTOR, '.store-stock').text
print(price, title, href, evaluate, store)
# 保存数据
writer.writerow([price, title, href, evaluate, store])
# 点击下一页
driver.execute_script('document.querySelector("#nextPage").click()')
input()
评论前必须登录!
注册