web-dev-qa-db-ja.com

クレイジーなcsvファイルに書き込む

スクレイピーでCSVファイルに書き込みたい

 for rss in rsslinks:
  item = AppleItem()
  item['reference_link'] = response.url
  base_url = get_base_url(response)
  item['rss_link'] = urljoin_rfc(base_url,rss)
  #item['rss_link'] = rss
  items.append(item)
  #items.append("\n")
 f = open(filename,'a+')    #filename is Apple.com.csv
 for item in items:
    f.write("%s\n" % item)

私の出力はこれです:

{'reference_link': 'http://www.Apple.com/'
 'rss_link': 'http://www.Apple.com/rss '
{'reference_link': 'http://www.Apple.com/rss/'
 'rss_link':   'http://ax.iTunes.Apple.com/WebObjects/MZStore.woa/wpa/MRSS/newreleases/limit=10/rss.xml'}
{'reference_link': 'http://www.Apple.com/rss/'
 'rss_link':  'http://ax.iTunes.Apple.com/WebObjects/MZStore.woa/wpa/MRSS/newreleases/limit=25/rss.xml'}

私が欲しいのはこのフォーマットです:

reference_link               rss_link  
http://www.Apple.com/     http://www.Apple.com/rss/
12
blackmamba

必要がある

  1. ヘッダー行を書きます。その後
  2. 各オブジェクトのエントリ行を書き込みます。

あなたはそれにアプローチすることができます:

_fields = ["reference_link", "rss_link"] # define fields to use
with open(filename,'a+') as f: # handle the source file
    f.write("{}\n".format('\t'.join(str(field) 
                              for field in fields))) # write header 
    for item in items:
        f.write("{}\n".format('\t'.join(str(item[field]) 
                              for field in fields))) # write items
_

"{}\n".format(s)は_"%s\n" % s_と同じ結果を与えることに注意してください。

0
jonrsharpe

単に-o csv、 お気に入り:

scrapy crawl <spider name> -o file.csv -t csv
69
Guy Gavriely

これは私がPython3を使ってうまくいったことです:

scrapy runspider spidername.py -o file.csv -t csv
3
jwalman

この問題を解決する最善の方法は、python in-build csvパッケージを使用することです。

import csv

file_name = open('Output_file.csv', 'w') #Output_file.csv is name of output file

fieldnames = ['reference_link', 'rss_link'] #adding header to file
writer = csv.DictWriter(file_name, fieldnames=fieldnames)
writer.writeheader()
for rss in rsslinks:
    base_url = get_base_url(response)
    writer.writerow({'reference_link': response.url, 'rss_link': urljoin_rfc(base_url, rss)}) #writing data into file.
2
Anurag Misra

tablib を試してください。

dataset = tablib.Dataset()
dataset.headers = ["reference_link", "rss_link"]

def add_item(item):    
   dataset.append([item.get(field) for fields in dataset.headers])

for item in items:
    add_item(item)

f.write(dataset.csv)

0
uhbif19