【问题标题】:Python CSV output to columns from two listsPython CSV 输出到两个列表中的列
【发布时间】:2021-01-23 23:06:33
【问题描述】:

我正在从 bing 获取搜索结果。除了输出到 csv 文件外,一切正常。我也尝试过 pandas,但似乎无法正确输出。我需要相应链接旁边的 A 列中的“url”和 B 列中的“名称”。

example search link

def scrape():
    urls = WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "b_algo")))
    url = [div.find_element_by_tag_name('a').get_attribute('href') for div in urls]
    names = WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "b_algo")))
    name = [div.find_element_by_tag_name('h2 > a').get_attribute('innerHTML').split('-')[0].strip() for div in names]

   x1 = [url]
   x2 = [name]

   pp.pprint([url,name])

   with open(bing_parameters.file_name, 'a', newline='\n', encoding='utf-8') as f:
       wr = csv.writer(f)
       for items in x1:
           wr.writerow([x1,x2])
scrape()

【问题讨论】:

    标签: python-3.x selenium csv export-to-csv


    【解决方案1】:

    试试这个。把url放到第一列,把名字放到第二列,然后写入csv。

    import pandas as pd
    df = pd.DataFrame(url)
    df.columns =['A']
    df['B']=name
    print(df)
    df.to_csv(bing_parameters.file_name, index=False)
    

    【讨论】:

    • 效果很好。如何追加而不是用熊猫覆盖?
    • df.to_csv(bing_parameters.file_name, mode='a', index=False)
    【解决方案2】:

    假设您有以下数据:

    x1 = ['foo']
    x2 = ['https://www.example.com']
    

    那么你现有的代码正在做这样的事情

    for items in x1:
        print([x1, x2])
    

    给出这个不正确的输出:

    [['foo'], ['https://www.example.com']]
    

    代码循环遍历 x1 的内容 - 一个包含一项的列表,因此循环将进行一次迭代 - 并输出一个包含 x1x2 的列表,这两个列表都是列表。

    如果 x1x2 始终是单个项目列表,您可以显式选择每个项目中的第一个项目,并省去循环:

        with open(bing_parameters.file_name, 'a', newline='\n', encoding='utf-8') as f:
           wr = csv.writer(f)
           wr.writerow([x1[0], x2[0]])
    

    或者只是不做这些多余的列表

       with open(bing_parameters.file_name, 'a', newline='\n', encoding='utf-8') as f:
           wr = csv.writer(f)
           wr.writerow([name, url])
    

    如果x1x2包含多个对应项,可以zip一起使用:

    x1 = [name1, name2]
    x2 = [url1, url2]
    
       with open(bing_parameters.file_name, 'a', newline='\n', encoding='utf-8') as f:
           wr = csv.writer(f)
           for name, url in zip(x1, x2):
               wr.writerow([name, url])
    

    甚至

    x1 = [name1, name2]
    x2 = [url1, url2]
    
       with open(bing_parameters.file_name, 'a', newline='\n', encoding='utf-8') as f:
           wr = csv.writer(f)
           wr.writerows(zip(x1, x2))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-20
      • 2017-05-28
      • 1970-01-01
      • 2019-11-09
      相关资源
      最近更新 更多