我正在使用 Selenium 從網頁的 HTML 正文中提取資料,并使用 Pandas 將資料寫入 .csv 檔案。
資料被提取并寫入檔案,但是我想操縱資料的格式以寫入指定的列,在閱讀了許多執行緒和檔案后,我無法理解如何執行此操作。
當前CSV檔案輸出如下,一行或一列的所有資料
0,
B09KBFH6HM,
dropdownAvailable,
90,
1,
B09KBNJ4F1,
dropdownAvailable,
100,
2,
B09KBPFPCL,
dropdownAvailable,
110
或者如果我使用 [count] count =1 方法,它將是一行
0,B09KBFH6HM,dropdownAvailable,90,1,B09KBNJ4F1,dropdownAvailable,100,2,B09KBPFPCL,dropdownAvailable,110
我希望輸出的格式如下,
/col1 /col2 /col3 /col4
0, B09KBFH6HM, dropdownAvailable, 90,
1, B09KBNJ4F1, dropdownAvailable, 100,
2, B09KBPFPCL, dropdownAvailable, 110
我曾嘗試使用 columns= options 但在終端中出現錯誤并且不明白我應該使用什么功能在附加詳細資訊下的檔案中實作此目的
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.append.html?highlight=append#pandas.DataFrame.append
簡化版如下
from selenium import webdriver
import pandas as pd
price = []
driver = webdriver.Chrome("./chromedriver")
driver.get("https://www.example.co.jp/dp/zzzzzzzzzz/")
select_box = driver.find_element_by_name("dropdown_selected_size_name")
options = [x for x in select_box.find_elements_by_tag_name("option")]
for element in options:
price.append(element.get_attribute("value"))
price.append(element.get_attribute("class"))
price.append(element.get_attribute("data-a-html-content"))
output = pd.DataFrame(price)
output.to_csv("Data.csv", encoding='utf-8-sig')
driver.close()
我是否需要單獨決議每個專案并附加?我希望將每個 .get_attribute 值寫入新列。
你有什么建議可以解決這個問題,因為我對熊貓不是很精通,謝謝你的幫助
uj5u.com熱心網友回復:
方法類似于@user17242583,但要短一點:
data = [[e.get_attribute("value"), e.get_attribute("class"), e.get_attribute("data-a-html-content")] for e in options]
df = pd.DataFrame(data, columns=['ASIN', 'dropdownAvailable', 'size']) # third column maybe is the product size
df.to_csv("Data.csv", encoding='utf-8-sig')
uj5u.com熱心網友回復:
將所有專案添加到price串列中將使它們全部位于一列中。相反,在字典中為每一列存盤單獨的串列,如下所示(隨意命名):
data = {
'values': [],
'classes': [],
'data_a_html_contents': [],
}
...
for element in options:
values.append(element.get_attribute("value"))
classes.append(element.get_attribute("class"))
data_a_html_contents.append(element.get_attribute("data-a-html-content"))
...
output = pd.DataFrame(data)
output.to_csv("Data.csv", encoding='utf-8-sig')
uj5u.com熱心網友回復:
您正在收集value、class和data-a-html-content并將它們附加到同一個 list price。因此,串列變為:
price = [value1, class1, data-a-html-content1, value2, class2, data-a-html-content2, ...]
因此,在 資料框 看起來像:

解決方案
要在單獨的列中獲取value、class和data-a-html-content,您可以采用以下兩種方法中的任何一種:
- 將字典傳遞給資料框。
- 將串列串列傳遞給資料框。
雖然@user17242583 和@h.devillefletcher 建議使用字典,但您仍然可以使用串列串列實作相同的功能,如下所示:
values = []
classes = []
data-a-html-contents = []
driver = webdriver.Chrome("./chromedriver")
driver.get("https://www.example.co.jp/dp/zzzzzzzzzz/")
select_box = driver.find_element_by_name("dropdown_selected_size_name")
options = [x for x in select_box.find_elements_by_tag_name("option")]
for element in options:
values.append(element.get_attribute("value"))
classes.append(element.get_attribute("class"))
data-a-html-contents.append(element.get_attribute("data-a-html-content"))
my_list = [[values], [classes], [data-a-html-contents]]
df = pd.DataFrame(my_list)
output = pd.DataFrame(my_list)
output.to_csv("Data.csv", encoding='utf-8-sig')
參考
您可以在以下位置找到一些相關的詳細討論:
- Selenium:從 Coincodex 抓取網頁歷史資料并轉換為 Pandas 資料框
- Python Selenium:如何在文本檔案中列印來自網站的值?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/369041.html
上一篇:根據列的最大行數創建新行
