Python CSV 输出到两个列表的列

Python CSV output to columns from two lists

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

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()

试试这个。将 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)

假设您有以下数据:

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

那么你现有的代码就是这样做的

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

给出这个错误的输出:

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

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

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

    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))