我有一个csv文件,其中包含以下数据:年,标题,作者。 例如:
Year,Title,Author
2018,Becoming,Michelle Obama
2018,Educated,Tara Westover
2018,Grant,Ron Chernow
我想再添加两列,一列用于字数统计,一列用于页数统计。
我编写了以下脚本,该脚本打开一个网页,搜索该书并提取字数和页数信息。
driver = webdriver.Chrome(chromedriver)
driver.get('https://www.readinglength.com/')
driver.maximize_window()
driver.implicitly_wait(10)
time.sleep(5)
search_box = driver.find_element_by_id("downshift-0-input")
search_box.send_keys(title)
search_box.submit()
driver.implicitly_wait(10)
word_count = driver.find_element_by_xpath("//div[@class='book-data']//div[2]").text
page_count = driver.find_element_by_xpath("//div[@class='book-data']//div[4]").text
print(word_count)
print(page_count)
time.sleep(5)
driver.quit()
我想执行以下操作:
从csv文件中获取标题并将其输入搜索中。 提取字数和页数信息,并将其添加到相应的行和列中。 对csv中的每个标题/行重复此操作。
任何帮助将不胜感激!
答案 0 :(得分:0)
在python中,处理.csv文件的最佳方法是使用一个名为pandas的软件包。熊猫具有读取csv https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html的功能 从那里开始,您可以使用csv做很多事情(在熊猫中,它表示为一种称为DataFrame的特殊数据类型)。例如,参见https://www.geeksforgeeks.org/adding-new-column-to-existing-dataframe-in-pandas/如何添加列。
当然,您可以使用另一个软件包来读取csv文件-该文件称为csv,此处显示了一个简短的教程https://realpython.com/python-csv/
我希望这会对您有所帮助:)
答案 1 :(得分:0)
类似的事情应该起作用。请根据需要进行修改。
import pandas as pd
def web_search(title: str):
driver = webdriver.Chrome(chromedriver)
driver.get('https://www.readinglength.com/')
driver.maximize_window()
driver.implicitly_wait(10)
time.sleep(5)
search_box = driver.find_element_by_id("downshift-0-input")
search_box.send_keys(title)
search_box.submit()
driver.implicitly_wait(10)
word_count = driver.find_element_by_xpath("//div[@class='book-data']//div[2]").text
page_count = driver.find_element_by_xpath("//div[@class='book-data']//div[4]").text
print(word_count)
print(page_count)
time.sleep(5)
driver.quit()
return word_count, page_count
df = pd.read_csv(file)
for index, row in df.iterrows():
print("Retrieving "+ str(row.title))
word_count, page_count = web_search(row.title)
df.loc[index,'word_count'] = word_count
df.loc[index, 'page_count'] = page_count
df.to_csv('newfile.csv')
答案 2 :(得分:0)
使用pandas软件包似乎是最方便的方法。 pandas提供了DataFrame
类,该类具有用于读取和写入csv的不错的方法,还提供了一种apply
方法,利用该方法我们可以基于其他列的值来创建新列。您的用例看起来像这样(我没有测试您的代码,只是将其粘贴到fetch_data()
函数中):
import time
import pandas as pd
from selenium import webdriver
def fetch_data(title):
driver = webdriver.Chrome(chromedriver)
driver.get('https://www.readinglength.com/')
driver.maximize_window()
driver.implicitly_wait(10)
time.sleep(5)
search_box = driver.find_element_by_id("downshift-0-input")
search_box.send_keys(title)
search_box.submit()
driver.implicitly_wait(10)
word_count = driver.find_element_by_xpath("//div[@class='book-data']//div[2]").text
page_count = driver.find_element_by_xpath("//div[@class='book-data']//div[4]").text
time.sleep(5)
driver.quit()
return word_count, page_count
def process_file(input_file_path, output_file_path):
df = pandas.read_csv(input_file_path)
df[['word_count', 'page_count']] = df['title'].apply(fetch_data).apply(pd.Series)
df.to_csv(output_file_path)
pandas的主要优点-在数据帧上快速执行操作-与您的情况无关紧要,因为Web解析花费更多时间,但是用pandas这样做仍然是非常方便,简洁和易读的我会说,编写代码的方式。