import time import csv import pandas as pd from selenium import webdriver from selenium.webdriver import Chrome,ChromeOptions from selenium.webdriver.common.by import By # driver_path = r'C:\Program Files\Google\Chrome\Application\chrome.exe' driver = webdriver.Chrome() driver.get('https://www.jd.com/') def drop_down(): for x in range(1,9,2): time.sleep(1) j = x /9 js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % j driver.execute_script(js) driver.find_element(By.CSS_SELECTOR,'#key').send_keys('燕麦') driver.find_element(By.CSS_SELECTOR,'.button').click() f = open(f'B:\京东商品数据.csv', mode='a', encoding='gbk', newline='') csv_writer = csv.DictWriter(f, fieldnames=[ '商品标题', '商品价格', '店铺名字', '标签', '商品详情页', ]) csv_writer.writeheader() 商品信息 = [] def get_shop(): time.sleep(10) # driver.implicitly_wait(10) drop_down() lis = driver.find_elements(By.CSS_SELECTOR,'#J_goodsList ul li') for li in lis: title = li.find_element(By.CSS_SELECTOR,'.p-name em').text.replace('\n', '') price = li.find_element(By.CSS_SELECTOR,'.p-price strong i').text shop_name = li.find_element(By.CSS_SELECTOR,'.J_im_icon a').text href = li.find_element(By.CSS_SELECTOR,'.p-img a').get_attribute('href') icons = li.find_elements(By.CSS_SELECTOR,'.p-icons i') icon = ','.join([i.text for i in icons]) dit = { '商品标题':title, '商品价格':price, '店铺名字':shop_name, '标签':icon, '商品详情页':href, } csv_writer.writerow(dit) # print(title,price,href,icon,sep=' | ') for page in range(1,3): time.sleep(1) drop_down() get_shop() driver.find_element(By.CSS_SELECTOR,'.pn-next').click() driver.quit() # data = csv.reader(open('B:\京东商品数据.csv'),delimiter=',') # sortedl = sorted(data,key=lambda x:(x[0],x[1]),reverse=True) # print('最贵的商品信息') # print(sortedl) # with open('B:\京东商品数据.csv','r',encoding='gbk') as f: # f_csv = csv.reader(f) # max_price = 0 # next(f_csv) # for row in f_csv: # if row[1].isdigit() and int(row[1]) > max_price: # max_price = int(row[1]) # print(max_price) with open('B:\京东商品数据.csv', 'r') as file: reader = csv.reader(file) header =next(reader) next(reader) max_price = float('-inf') for row in reader: num = float(row[1]) if num > max_price: max_price = num item = row[0] name_0= row[2] print(item,max_price,name_0)程序中出现ValueError: could not convert string to float: '商品价格'解决方法
时间: 2023-09-23 17:04:12 浏览: 200
在这个程序中,您使用了csv模块来读取和写入CSV文件,但是当您尝试将字符串转换为浮点数时出现了ValueError。这是因为您尝试将一个非数字字符串('商品价格')转换为float类型。
要解决这个问题,您需要在读取文件之前跳过CSV文件的第一行(即标题行),该行包含列名。可以使用csv.reader()函数的next()方法来跳过标题行,例如:
```
with open('B:\京东商品数据.csv', 'r') as file:
reader = csv.reader(file)
header = next(reader) # 跳过标题行
max_price = float('-inf')
for row in reader:
num = float(row[1])
if num > max_price:
max_price = num
item = row[0]
name_0= row[2]
print(item, max_price, name_0)
```
注意,这里使用float('-inf')来初始化max_price,以确保第一个价格将始终大于它。还要注意,您需要在for循环中保存商品名称和店铺名称,以便在找到最大价格时打印它们。
相关问题
from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By import csv import os import time import json import django import pandas as pd
你好,这段代码看起来是在使用 Selenium 和 Django,可能是在进行网页爬虫或者自动化测试的开发。其中:
- `webdriver` 模块是 Selenium 的核心模块,用于驱动浏览器进行自动化操作;
- `Service` 是 ChromeDriver 的一个类,用于启动 Chrome 浏览器;
- `By` 是 Selenium 的一个常量类,提供了多种选择器方式(如 ID、class、name、tag 等);
- `csv` 模块是 Python 自带的用于读写 CSV 文件的模块;
- `os` 模块提供了许多与操作系统交互的接口;
- `time` 模块提供了时间相关的函数;
- `json` 模块用于处理 JSON 格式的数据;
- `django` 是一个流行的 Web 开发框架,在这里可能是用来连接数据库的;
- `pandas` 是一个处理表格数据的 Python 库,可能是用来处理 CSV 文件的。
import requests import random from matplotlib import pyplot as plt from selenium import webdriver import time import pandas import csv import jieba import csv import pandas as pd import numpy as np from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.cluster import KMeans中库函数的作用
让我逐个解释一下代码中导入的库的作用:
1. `requests`:用于发送HTTP请求,从网络上获取数据。
2. `random`:用于生成随机数。
3. `matplotlib.pyplot`:用于数据可视化,绘制图形。
4. `selenium.webdriver`:用于模拟浏览器行为,实现自动化测试和爬取动态网页数据。
5. `time`:提供时间相关的函数,用于暂停或延时程序执行。
6. `pandas`:用于数据处理和分析,提供高性能、易用的数据结构和数据分析工具。
7. `csv`:用于读取和写入CSV文件。
8. `jieba`:中文分词库,用于将中文文本进行分词处理。
9. `sklearn.feature_extraction.text.TfidfVectorizer`:文本特征提取工具,用于将文本转换为TF-IDF特征向量。
10. `sklearn.cluster.KMeans`:K-means聚类算法实现,用于对数据进行聚类。
这些库提供了各种功能和工具,使得代码能够更方便地进行网络请求、数据处理、文本处理、数据可视化和聚类等操作。
阅读全文