Как перейти по следующей ссылке из цикла for? - PullRequest
0 голосов
/ 27 апреля 2019

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

import scrapy


class MyDomainSpider(scrapy.Spider):
    name = 'My_Domain'
    allowed_domains = ['MyDomain.com']
    start_urls = ['https://example.com'] 

    def parse(self, response):
        Colums = response.xpath('//*[@id="tab-5"]/ul/li')
        for colom in Colums:
            title = colom.xpath('//*[@class="lng_cont_name"]/text()').extract_first()  
            address = colom.xpath('//*[@class="adWidth cont_sw_addr"]/text()').extract_first()
            con_address = address[9:-9]  
            url= colom.xpath('//*[@id="tab-5"]/ul/li/@data-href').extract_first() 
            print(url)
            print('*********************')    
            yield scrapy.Request(url, callback = self.parse_dir_contents)



    def parse_dir_contents(self, response):
        print('000000000000000000')
        a = response.xpath('//*[@class="fn"]/text()').extract_first()   

        print(a)

Я пробовал что-то подобное, но нули печатаются только один раз, а звездочки печатаются 10 раз, когда я хочу, чтобы 2-я функция запускалась каждый раз, когда запускается цикл.

1 Ответ

3 голосов
/ 27 апреля 2019

Вы, вероятно, делаете что-то, что не предназначено.Если

url = colom.xpath('//*[@id="tab-5"]/ul/li/@data-href').extract_first()

внутри цикла, url всегда приводит к одному и тому же значению.По умолчанию Scrapy фильтрует повторяющиеся запросы (см. здесь ).Если вы действительно хотите очистить один и тот же URL несколько раз, вы можете отключить фильтрацию на уровне запроса с аргументом dont_filter=True для конструктора scrapy.Request.Тем не менее, я думаю, что вы действительно хотите, чтобы это было так (осталась только соответствующая часть кода):

def parse(self, response):
    Colums = response.xpath('//*[@id="tab-5"]/ul/li')
    for colom in Colums:
        url = colom.xpath('./@data-href').extract_first() 
        yield scrapy.Request(url, callback=self.parse_dir_contents)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...