如何从Excel中提取列表并用该列表搜索动态网站?

1 投票
2 回答
62 浏览
提问于 2025-04-14 16:15

长话短说,我在本地的五金店工作,想尽可能地简化和自动化很多事情。这是我正在进行的一个大项目的一部分。

正如标题所说,我想从一个Excel文件中提取一份UPC条形码的列表。然后,我想用这些条形码在www.truevalue.com上进行搜索;最后,我想从每个搜索结果中提取SKU编号,并把它放到另一个Excel文件中,和对应的UPC条形码一起。你可能会想,我们店的代表会愿意帮我们获取这些信息,但公司方面并没有提供太多帮助。

我花了好几天试图搞明白这个事情;不幸的是,我上学学的是生物、化学和商业,而不是计算机科学。所以这些东西对我来说比较新。

为了搞定这个问题,我开始了解Scrapy和Selenium。我看过的所有教程和常见问题解答都只教怎么搜索一个单独的商品并从结果页面提取信息;因此,我相信我可以写出能做到这一点的代码(用Python)。但是,我找不到任何关于如何搜索多个产品并将SKU列表导出到Excel文件的解释。

我有点不知道该用哪个模块或函数来让Excel和Selenium这样配合使用。我并不一定要用Scrapy或Selenium。如果有其他更好的方法,我也愿意学习任何能让我搞定这个问题的东西。所以如果你们有更好的主意,我很乐意尝试。如果我用错了什么技术术语,请原谅我,正如我所说,我对这一切都很陌生。谢谢你们花时间阅读,希望你们能帮到我!

2 个回答

0

Openpyxl 是一个很棒的工具,可以用来读取 Excel 表格。你需要做的就是使用 load_workbook() 方法来打开你的 Excel 文件,然后从你需要的信息所在的单元格中读取数据,并把所有的值保存到一个列表或字典里。

如果你已经找到了一种方法来提取 一个 项目的数据,那么你只需要遍历你的列表或字典,对每个项目进行搜索或提取,把每次提取的结果添加到另一个列表中。然后,你可以再次使用 openpyxl 将新数据写入同一个或另一个表格中。

0

下面是我写的一个简单脚本,用来使用openpyxl这个库来读取和写入Excel表格,同时从几个产品页面抓取一些示例数据。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from openpyxl import load_workbook
from openpyxl import Workbook

url = 'https://www.truevalue.com'
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(url)
path = 'path to workbook'

# open Excel workbook and create product list
original_wb = load_workbook(filename = path + 'TrueValueUPCs.xlsx', data_only=True)
original_ws = original_wb['UPC Codes']
product_list = original_ws['A1':'A2']

# create new Excel workbook for writing and add headers
new_wb = Workbook()
new_ws = new_wb.active
row = ['Product Code', 'Brand', 'Name', 'Price']
new_ws.append(row)

# close select store popup
wait = WebDriverWait(driver, 10)
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"aside.locator-modal button.action-close"))).click()

for product in product_list:
    # search for product
    wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"div.header-content-right button[aria-label='Search']"))).click()
    wait.until(EC.visibility_of_element_located((By.ID,"search"))).send_keys(product[0].value + "\n")

    # product page
    brand = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.product-info-wrapper div.brand > div.value"))).text
    name = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.product-info-wrapper h1.page-title"))).text
    price = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "span.price"))).text

    #write to Excel
    row = [product[0].value, brand, name, price]
    # print(row) # for debugging
    new_ws.append(row)

new_wb.save(path + 'output.xlsx')
driver.quit()

我的输出文件看起来是这样的:

产品代码 品牌 名称 价格
TV1010181 MASTER MECHANIC 1/2英寸驱动棘轮扳手 $52.99
DCD780C2 DEWALT 20伏紧凑型无绳电钻/驱动套件,1/2英寸,2个锂电池 $235.00

你可能需要或想要更改几个地方:

  1. path是你当前Excel工作簿在电脑上的路径,比如 path = 'C:\\Users\\myname\\Desktop\\'
  2. 现有工作簿的名称,比如 'TrueValueUPCs.xlsx'
  3. 包含UPC代码的工作表名称,比如 'UPC Codes'
  4. 要读取的值的范围,比如 'A1':'A2'
  5. 列标题,也就是表头行
  6. 输出文件的名称,比如 'output.xlsx'

撰写回答