【问题标题】:How to writerows without csv index headers?如何在没有 csv 索引标题的情况下编写行?
【发布时间】:2019-10-15 20:32:55
【问题描述】:

我正在尝试将text_entries 中的第二个值写入文件,但我不想在我的 .csv 中包含第一个值 - 例如 index2、index3 等。

如何在不向 CSV 输出添加索引标题的情况下写入新行? 代码如下:

import csv
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get('https://www.example.se/list')

def get_elements_by_xpath1(driver, xpath):
        return [entry.text for entry in driver.find_elements_by_xpath(xpath)]

text_entries = [
    ("index2", "//div[@class='apartment-fact' and contains(span, '')][1]"),
    ("index3", "//div[@class='apartment-fact' and contains(span, '')][2]"),
    ("index4", "//div[@class='apartment-fact' and contains(span, '')][3]"),
    ("index5", "//div[@class='apartment-fact' and contains(span, '')][4]")]

with open('output.csv', 'ab') as fd:
    csv_output = csv.writer(fd)
    csv_output.writerow([name for name, xpath in text_entries])
    entries = []
    for name, xpath in text_entries:
        entries.append(get_elements_by_xpath1(driver, xpath))
    csv_output.writerows(zip(*entries))

【问题讨论】:

  • csv_output.writerow([name for xpath in text_entries])? name 未定义。
  • 对不起; [名称的名称,text_entries 中的 xpath] :)
  • 您能否详细说明您的预期/实际结果是什么?
  • 那么请用edit修复
  • @martineau get_elements_by_xpath1(driver, xpath) 的定义是 return (在这种情况下会带来文本,在另一种情况下会带来 hrefs)。至于minimu reproducible example,我将添加几行缺少的导入和代码,可能会有所帮助。感谢您的提示!

标签: python csv export-to-csv python-2.x webdriver-manager


【解决方案1】:

这似乎是你想要的:


import csv

def get_elements_by_xpath1(driver, xpath):
    return [entry.text for entry in driver.find_elements_by_xpath(xpath)]

text_entries = [
    ("index2", "//div[@class='apartment-fact' and contains(span, '')][1]"),
    ("index3", "//div[@class='apartment-fact' and contains(span, '')][2]"),
    ("index4", "//div[@class='apartment-fact' and contains(span, '')][3]"),
    ("index5", "//div[@class='apartment-fact' and contains(span, '')][4]")]

with open('output.csv', 'a') as fd:
    csv_output = csv.writer(fd)
    for _, xpath in text_entries:
        csv_output.writerow([xpath] + get_elements_by_xpath1(driver, xpath))

【讨论】:

  • W 感谢您的提示,但现在我将每行代码打印在单独的行中(而不是 Xpath 的结果)。好消息是它确实删除了索引标题名称!
  • @Neverend 已编辑。我不确定您在每一行中要查找的内容。
  • 我的错...我一直在寻找从 Xpath 派生的值。但我对你的代码做了一些调整,让它像这样工作:'with open('output.csv', 'a') as fd: csv_output = csv.writer(fd) entries = [] for name, xpath in text_entries: entries.append(get_elements_by_xpath1(driver, xpath)) csv_output.writerows(zip(*entries))' 所以问题解决了!谢谢你,非常感谢!
猜你喜欢
  • 2020-09-27
  • 1970-01-01
  • 2017-05-20
  • 1970-01-01
  • 2021-10-30
  • 2013-06-17
  • 1970-01-01
  • 2020-02-06
  • 1970-01-01
相关资源
最近更新 更多