Здравствуйте дамы и господа.
Возникла необходимость написать 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)