Задать вопрос
@slavamironoff

Как scrapy заставить сканировать страницу каждый час?

Здравствуйте дамы и господа.
Возникла необходимость написать telegramm бота - парсера, фриланс заказов по питону.
Взял 2 библиотеки scrapy и tele-bot, они общаются JSON.
Идея такая:
- пользователь пишет команду старт, бот отправляет сообщение, что теперь буду тебе присылать информацию по заказам.
Смотрит список данных, которые извлекает из JSON, которые в свою очередь записал scrapy.
Вопрос в следующем, как заставить scrapy сканировать страницу, каждый час?
Я знаю, что можно использовать time.sleep(3600) Но надо что то вроде бесконечного цикла.
Пробовал:
while True:
    time.sleep(2*60)
    MainSpidner()

Но безуспешно.
Вот код парсера:
import scrapy
import json
import time


class MainSpidner(scrapy.Spider):
    ''' Класс запросов к freelance.ru '''

    name = 'FLforPython'


    def start_requests(self):

        URLS = ["https://freelance.ru/projects/?cat=4&spec=446"]

        for URL in URLS:
            yield scrapy.Request(url=URL, callback=self.parse)
    def parse(self, response):

        titleLists = []     # Список заказ-заголовков
        textList = []       # Сприсок описаний заказов
        priceList = []      # Список цен за заказы

        for item in response.css("div.p_title h2 a.ptitle span::text").getall():
            titleLists.append(item)
            set(titleLists)


        for item in response.css("a.descr p span::text").getall():
            textList.append(item)

        
        for item in response.css("a.descr p span b::text").getall():
            priceList.append(item)


        if titleLists is not None and textList is not None and priceList is not None:

            orders = {
                "title" : "",
                "text" : "",
                "price" : ""
            }

            for title in titleLists[:1]:
                orders["title"] = title

            for text in textList[:1]:
                orders["text"] = text
            
            for price in priceList[:1]:
                orders["price"] = price
            
            # Сохранение информации в JSON
            with open("../../items.json", 'w') as f_obj:
                json.dump(orders, f_obj)
  • Вопрос задан
  • 255 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
Astrohas
@Astrohas
Python/Django Developer
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы