分享

3分钟搞定3小时的工作,只因我用 Python 帮她写了个工具

 网摘文苑 2022-12-09 发布于新疆

背景

小姐姐在日常工作有一项很令她抓狂的事情,就是要不停地从某电商网站复制商品名称、单价、详情等信息,然后粘贴到Excel表格中去做竞品分析。如果就几条数据,感觉辛苦下,手工弄弄其实也是没什么,但后面问了一下得知这个事情她每周都要做,这件事情大概要占用她半天左右的时间才能搞完,数据比较多的情况下甚至要用一天的时间才能搞完。

工具运行效果:

文章图片1

解决方案

1、获取数据商品列表信息。

2、获取商品详细信息。

3、生成Excel文件。

技术实现

1、导入模块

import requestsimport jsonimport timefrom selenium.webdriver.chrome.service import Servicefrom selenium import webdriverfrom selenium.webdriver.common.by import Byimport xlsxwriterimport random

2、获取数据

# 获取itemList数据def fetchItemDataList():	# 最大页数	maxCount = 1	headers = {		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36'	}	itemListData = []	page = 1	while page <= maxCount:  	# 商品列表的链接		itemListUrl = 'https:///Search?area=15&enc=utf-8&keyword=手机&adType=7&urlcid3=655&page=${page}&ad_ids=291:19&xtest=new_search&_=1670509257372'		# get请求,传入参数,返回结果集		print(itemListUrl)		resp = requests.get(itemListUrl, headers=headers)		resJson = json.loads(resp.text)		print('第 ' + str(page) + ' 页数据:===>\n')		itemList = resJson['291']		for item in itemList:			itemListData.append(item)		page += 1		time.sleep(1 + random.randint(0, 100) * 0.01)	return itemListData

3、获取要写入Excel文件的数据

# 获取要写入Excel文件的数据def getExcelDataList(chromedriverPath): # chromedriverPath chromedriver驱动文件路径 service = Service(chromedriverPath) driver = webdriver.Chrome(service=service) # 获取itemList数据 itemList = fetchItemDataList() resultList = [] itemNumber = 1 for item in itemList: print(f'<== 第 {itemNumber} 条') itemNumber += 1 driver.get(item['link_url']) # 上架时间 title = '' price = '' itemPicture = '' try: title = driver.find_element(By.XPATH, '/html/body/div[6]/div/div[2]/div[1]').text except Exception as e: print(e) try: price = driver.find_element(By.XPATH, '/html/body/div[6]/div/div[2]/div[4]/div/div[1]/div[2]/span[1]/span[2]').text except Exception as e: print(e) try: itemPicture = driver.find_element(By.XPATH, '//*[@id='spec-img']').get_attribute('data-origin') except Exception as e: print(e) _itemPicture = 'https:' + itemPicture print(f'商品名称: {title}') print(f'单价: {price}') print(f'图片: {_itemPicture}') resultList.append( { 'title': title, 'price': price, 'itemPicture': _itemPicture, } ) time.sleep(random.randint(0, 100) * 0.01) print(resultList) driver.close() return resultList

4、生成Excel文件

def main():  # 要生成Excel文件名	whriteExcelFileName = 'xxx文件名.xlsx'	# chromedriver文件路径	chromedriverPath = '/Users/xxx/chromedriver'	# 要写入的Excel数据	excelDataList = getExcelDataList(chromedriverPath)	# Create a workbook and add a worksheet.	workbook = xlsxwriter.Workbook(whriteExcelFileName)	worksheet = workbook.add_worksheet()	# Add a bold format to use to highlight cells.	bold = workbook.add_format({'bold': True})	# Write some data headers.	worksheet.write('A1', '商品名称', bold)	worksheet.write('B1', '单价', bold)	worksheet.write('C1', '图片', bold)	# Start from the first cell. Rows and columns are zero indexed.	# row:0 data headers	row = 1	col = 0	# Iterate over the data and write it out row by row.	for item in (excelDataList):		worksheet.write(row, col,     item['title'])		worksheet.write(row, col + 1, item['price'])		worksheet.write(row, col + 2, item['itemPicture'])		row += 1	workbook.close()if __name__ == '__main__':   main()

结果

文章图片2

总结

为了方便大家理解,以上内容是我实现这个工具的精简版本,实际要比这复杂得多。在这过程中,也遇到不少困难,踩了不少坑。一开始我是以为就这玩意分分钟就能搞定,实践过程中却被这残酷的现实啪啪打脸了。主要遇到的问题:1、是在处理获取的数据方面,会遇到各种异常的情况。2、如何更好地去优化正确率。3、需要处理很多相关库的报错问题,使用方式的问题。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多