Python CSV 输出到两个列表的列
Python CSV output to columns from two lists
我正在从 bing 中获取 bing 搜索结果。除了 csv 文件的输出外,一切正常。我也试过 pandas 但似乎无法正确输出。我需要 A 列中的“url”和 B 列中相应 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
的内容 - 一个包含一项的列表,因此循环将有一次迭代 - 并输出包含 x1
和 x2
的列表,这两个都是列表。
如果 x1
和 x2
始终是单个项目列表,您可以显式 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])
如果x1
和x2
包含多个对应项,您可以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))
我正在从 bing 中获取 bing 搜索结果。除了 csv 文件的输出外,一切正常。我也试过 pandas 但似乎无法正确输出。我需要 A 列中的“url”和 B 列中相应 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
的内容 - 一个包含一项的列表,因此循环将有一次迭代 - 并输出包含 x1
和 x2
的列表,这两个都是列表。
如果 x1
和 x2
始终是单个项目列表,您可以显式 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])
如果x1
和x2
包含多个对应项,您可以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))