Scrapy следуя ссылкам, извлекая новые и следуя за ними - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь создать скребок, который очищает сайт для своих продуктов.Я решил извлечь все ссылки на категории из меню навигации, затем перейти по ним и извлечь все ссылки на товары, которые я позже проанализирую в функции parse_product.Но я не знаю, как лучше всего это сделать.Я борюсь со следующими ссылками на parse_menu и ссылками на дополнительные продукты.Критикуйте мой код, пожалуйста.

class DiorSpider(CrawlSpider):
    name = 'newdior'
    allowed_domains = ['www.dior.com']
    start_urls = ['https://www.dior.com/en_us/']
    rules = (
        Rule(LinkExtractor(allow=(r'^https?://www.dior.com/en_us',
                                  )), callback='parse_menu'),
        Rule(LinkExtractor(allow=(r'^https?://www.dior.com/en_us/products/.*',
                                  )), callback='parse_product'),

    )

    def parse_menu(self, response):
        menu = response.xpath('//a[@class="navigation-item-link"]').extract()
        for item in menu:
            link = re.compile(r'a class="navigation-item-link" href="([a-zA-Z0-9_/-]*)"').findall(item)
            if link:
                absolute_url = response.urljoin(link[0])
                yield absolute_url


    def parse_product(self, response):

1 Ответ

0 голосов
/ 03 января 2019
class DiorSpider(Spider):  #crawlspider is used mostly when you use Linkextractors.
    name = 'newdior'
    allowed_domains = ['www.dior.com']
    start_urls = ['https://www.dior.com/en_us/']

    #if you're going through nevigation bar, no need to add Rules.

    def parse(self, response):
        links = response.xpath('//a[@class="navigation-item-link"]/@href').extract()    #here you can easily extract links
        for link in links:
            #link = re.compile(r'a class="navigation-item-link" href="([a-zA-Z0-9_/-]*)"').findall(item) 
            #links are extracted in xpath above.
            absolute_url = response.urljoin(link)
            yield Request(absolute_url, self.parse_product)


    def parse_product(self, response):
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...