Я использую Pandas
как способ записи данных из Selenium
.Pandas написать переменное количество новых строк из списка в серии
Два примера результаты из окна поиска ac_results
на веб-странице:
#Search for product_id = "01"
ac_results = "Orange (10)"
#Search for product_id = "02"
ac_result = ["Banana (10)", "Banana (20)", "Banana (30)"]
Orange возвращает только один цена ($ 10), в то время как банан возвращает переменное число цен от разных производителей, в данном примере три цены ($ 10), (20 долл. США), (30 долл. США).
Код использует regex через re.findall
, чтобы захватить каждую цену и поместить их в список. Код работает нормально, пока re.findall
находит только один элемент списка, как для апельсинов. Проблема в том, когда есть переменное количество цен, как при поиске Бананов. Я хотел бы создать новую строку для каждой заявленной цены, а строки должны также включать product_id
и item_name
.
Выходной ток:
product_id prices item_name
01 10 Orange
02 [u'10', u'20', u'30'] Banana
Желаемый результат:
product_id prices item_name
01 10 Orange
02 10 Banana
02 20 Banana
02 30 Banana
Текущий код:
df = pd.read_csv("product_id.csv")
def crawl(product_id):
#Enter search input here, omitted
#Getting results:
search_result = driver.find_element_by_class_name("ac_results")
item_name = re.match("^.*(?=(\())", search_result.text).group().encode("utf-8")
prices = re.findall("((?<=\()[0-9]*)", search_reply.text)
return pd.Series([prices, item_name])
df[["prices", "item_name"]] = df["product_id"].apply(crawl)
df.to_csv("write.csv", index=False)
FYI: Работающие решение с csv
модулем, но я хочу использовать Pandas
.
with open("write.csv", "a") as data_write:
wr_data = csv.writer(data_write, delimiter = ",")
for price in prices: #<-- This is the important part!
wr_insref.writerow([product_id, price, item_name])
В основном все, что нужно сделать, это панды эквивалент 'csv' модуля: ' за цену цен: wr_insref.writerow ([product_id, цена, item_name]) '(см. Выше) Это означает дублирование значений из cols 'product_id' и' tem_name', если в списке «цены» есть элементы. – Winterflags
Я извлекаю «цены» через re.findall как список из активного окна поиска. Однако он не должен записывать весь список в ячейку, что он делает прямо сейчас. – Winterflags