#scrapy
#scrapy
Вопрос:
Я хочу создать csv-файл, заполнить его элементами из файла Items и добавлять в csv-файл новые данные каждый раз, когда я впоследствии запускаю программу. Моя цель — использовать cron для запуска его через определенные промежутки времени после его настройки.
import scrapy
import json
from ..items import AnotherddItem
import datetime
import csv
class AnotherddSpider(scrapy.Spider):
name = 'ddgrab'
allowed_domains = ['example.com']
start_urls = ['https://www.example.com/all?source=private']
csv_columns=['timestamp','sellerId','sellerName','adUrl']
dict_data = [timestamp, sellerId, sellerName, adUrl]
csv_file = 'test.csv'
with open(csv_file, 'w') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=csv_columns)
writer.writeheader()
for data in dict_data:
writer.writerow(data)
dict_data содержит все поля в моем items.py файл. Я знаю, что то, что я сделал здесь, неправильно, потому что поля dict_data еще не были определены, но я не знаю, как получить к ним доступ.
Комментарии:
1. Возможно, это стоит того, чтобы открыть запрос функции выше по потоку.
2. Спасибо Gallaecio, я подключил все к базе данных sqlite, и теперь все работает хорошо. У меня есть еще одна проблема, хотя я не уверен, что делать дальше. Точнее, как это сделать. Я хочу очистить те же URL-адреса, но я хочу очистить их через час, 24 часа спустя, 48 часов спустя и т.д. Я могу использовать временную метку, чтобы сделать все это, но мне интересно, могу ли я передать это через те же конвейеры и в ту же базу данных с новыми столбцами, представляющими новые данные. В данный момент она запущена на crontab, которая запускается каждую минуту, и я хотел бы иметь возможность удалять их снова.
3. Извините, но это мой первый проект с использованием python, scrapy, поэтому я нахожусь на крутой кривой обучения и во многих вещах я не уверен.
Ответ №1:
Если вы действительно хотите добавить данные в свой файл, вам нужно создать пользовательский конвейер, который проверит, существует ли уже выходной файл, и при необходимости запишет строку заголовка.