Создание сценария для сессии Telnet?

Если проблема заключается в одновременном посещении большего количества URL-адресов, вы можете посещать их по одному, используя сигнал spider_idle ( https://docs.scrapy.org/en/latest/topics/signals.html. ).

Идея состоит в следующем:

1.start_requests посещает только первый URL-адрес

2. когда паук бездействует, метод spider_idle называется

3. метод spider_idle удаляет первый URL и посещает второй URL

4.так на ...

Код будет примерно таким (я не пробовал):

class SlfSpider1Spider(CrawlSpider):
    name = 'slf_spider1'
    custom_settings = { 'CONCURRENT_REQUESTS': '1' }   
    allowed_domains = ['gipfelbuch.ch']
    start_urls = ['https://www.gipfelbuch.ch/gipfelbuch/touren/seite/'+str(i) for i in [1,650]]

    @classmethod
    def from_crawler(cls, crawler, *args, **kwargs):
        spider = super(SlfSpider1Spider, cls).from_crawler(crawler, *args, **kwargs)
        # Here you set which method the spider has to run when it gets idle
        crawler.signals.connect(spider.spider_idle, signal=signals.spider_idle)
        return spider

    # Method which starts the requests by vicisting all URLS specified in start_urls
    def start_requests(self):
        # the spider visits only the first provided URL
        url = self.start_urls[0]:
        print('#### START REQUESTS: ',url)
        yield scrapy.Request(url, callback=self.parse_verhaeltnisse, dont_filter=True)

    def parse_verhaeltnisse(self,response):
        links = response.xpath('//td//@href').extract()
        for link in links[0:2]:
            print('##### PARSING: ',link)
            abs_link = 'https://www.gipfelbuch.ch/'+link
            yield scrapy.Request(abs_link, callback=self.parse_gipfelbuch_item, dont_filter=True)


    def parse_gipfelbuch_item(self, response):
        route = response.xpath('/html/body/main/div[4]/div[@class="col_f"]//div[@class="togglebox cont_item mt"]//div[@class="label_container"]')

        print('#### PARSER OUTPUT: ')

        key=[route[i].xpath('string(./label)').extract()[0] for i in range(len(route))]
        value=[route[i].xpath('string(div[@class="label_content"])').extract()[0] for i in range(len(route))]
        fields = dict(zip(key,value))

        print('Route: ', fields['Gipfelname'])
        print('Comments: ', fields['Verhältnis-Beschreibung'])

        print('Length of dict extracted from Route: {}'.format(len(route)))
        return

    # When the spider gets idle, it deletes the first url and visits the second, and so on...
    def spider_idle(self, spider):
        del(self.start_urls[0])
        if len(self.start_urls)>0:
            url = self.start_urls[0]
            self.crawler.engine.crawl(Request(url, callback=self.parse_verhaeltnisse, dont_filter=True), spider)

41
задан Sameer 2 March 2017 в 04:36
поделиться

5 ответов

Ожидайте создается для этого и может обработать ввод/вывод плюс тайм-ауты и т.д. Обратите внимание, что, если Вы не поклонник TCL, существует, Ожидают модули для Perl/Python/Java.

Править: Вышеупомянутая страница предлагает, чтобы Википедия Ожидала, что запись является полезным ресурсом :-)

13
ответ дан Brian Agnew 27 November 2019 в 00:37
поделиться

В то время как не непосредственно связанный с Вашим вопросом, я рекомендовал бы использовать ssh вместо этого, поскольку можно выполнить определенные команды через него (плюс, он более безопасен по умолчанию).

-2
ответ дан Brian Mitchell 6 July 2019 в 13:19
поделиться

Я использовал различные методы для сценариев сессий telnet под Unix, но самый простой является, вероятно, последовательностью эха и команд сна с их выводом, переданным по каналу в telnet. Передача по каналу вывода в другую команду является также возможностью.

Глупый пример

(echo password; echo "show ip route"; sleep 1; echo "quit" ) | telnet myrouter

Это (в основном) получает таблицу маршрутизации маршрутизатора Cisco.

37
ответ дан Vatine 27 November 2019 в 00:37
поделиться

Другой метод должен использовать netcat (или nc, зависящий от который posix) в том же формате как vatine шоу, или можно создать текстовый файл, который содержит каждую команду на своей собственной строке.

Я нашел, что некоторые posix' telnets не обрабатывают перенаправление правильно (который является, почему я предлагаю netcat),

12
ответ дан KevinDTimm 27 November 2019 в 00:37
поделиться

Несколько вопросов:

  1. Можно ли поместить материал на устройство, в которое Вы являетесь telnetting?
  2. Команды выполняются сценарием то же, или они варьируются машиной/пользователем?
  3. Вы хотите, чтобы человек, нажимающий значок, должен был обеспечить идентификатор пользователя и/или пароль?

Тем не менее я записал некоторый Java только что, чтобы говорить с несколькими поддерживающими IP удлинителями (BayTech RPC3s), который мог бы быть полезен для Вас. Если Вам будет интересно, то я буду видеть, могу ли я вскопать его и отправить его где-нибудь.

0
ответ дан BonkaBonka 27 November 2019 в 00:37
поделиться
Другие вопросы по тегам:

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