スクレイピーで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/
必要がある
あなたはそれにアプローチすることができます:
_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
_と同じ結果を与えることに注意してください。
単に-o csv
、 お気に入り:
scrapy crawl <spider name> -o file.csv -t csv
これは私がPython3を使ってうまくいったことです:
scrapy runspider spidername.py -o file.csv -t csv
この問題を解決する最善の方法は、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.
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)