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

Куда вставить таймер Python чтобы работало?

Думаю, что нашла решение с получением нужной html страницы. Ранее скарпи получал пустую html.
Т.е. сейчас перед тем как собирать данные со страницы скрапи подождёт 5 секунд (за это время JS код успеет запросить нужный html) и нужная информация соберётся.

Хепните как быть с вставкой таймера плиз.
# -*- coding: utf-8 -*-
import scrapy
from threading import Timer


class ExampleSpider(scrapy.Spider):
    name = 'bc'
    start_urls = [
        'https://www.greatcircus.ru/',
    ]

    def parse(self, response):
        for ticket in response.css('.col-xs-12 schedule-main-tickets-container'):
            event_name = ticket.css('.schedule-main-tickets-show-title::text').extract(),
            place = ticket.css('.schedule-main-tickets-location::text').extract(),
            url = ticket.css('.text-center a::text').extract(),
            yield {
                'event_name': event_name,
                'place': place,
                'url': url,
            }

    t = Timer(5.0, parse)
    t.start()


Сейчас выходит ошибка:
Exception in thread Thread-1:
Traceback (most recent call last):
  File "C:\programs for work\lib\threading.py", line 917, in _bootstrap_inner
    self.run()
  File "C:\programs for work\lib\threading.py", line 1166, in run
    self.function(*self.args, **self.kwargs)
TypeError: parse() missing 2 required positional arguments: 'self' and 'response'
  • Вопрос задан
  • 350 просмотров
Подписаться 3 Простой 1 комментарий
Решения вопроса 1
@mrxor
Simple is better than complex
Вам правильно написали в комментарии, что ждать тут бесполезно - скрапи не будет исполнять js.
По коду - зачем вам таймер из threading, кажется для вашей задачи досточно sleep(5). Но это все равно не поможет, если у вас хтмл изменяется jsом после загрузки - вам нужен селениум.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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