Scrapy: Извлечение ссылок и текста

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

Мой items.py файл приведен ниже:

import scrapy


class IkeaItem(scrapy.Item):

    name = scrapy.Field()
    link = scrapy.Field()

И паук приведен ниже:

import  scrapy
from ikea.items import IkeaItem
class IkeaSpider(scrapy.Spider):
    name = 'ikea'

    allowed_domains = ['http://www.ikea.com/']

    start_urls = ['http://www.ikea.com/']

    def parse(self, response):
        for sel in response.xpath('//tr/td/a'):
            item = IkeaItem()
            item['name'] = sel.xpath('a/text()').extract()
            item['link'] = sel.xpath('a/@href').extract()

            yield item

При запуске файла я не получаю никакого вывода. Выход json файла выглядит примерно так:

[[{"link": [], "name": []}

Результат, который я ищу, - это имя местоположения и ссылки. Я ничего не получаю. Где я ошибаюсь?

Ответ 1

В выражениях xpath для полей элемента есть простая ошибка. Цикл уже проходит теги a, вам не нужно указывать a во внутренних выражениях xpath. Другими словами, в настоящее время вы ищете теги a внутри тегов a внутри td внутри tr. Это, очевидно, ничего не значит.

Замените a/text() на text() и a/@href на @href.

(проверено - работает для меня)

Ответ 2

используйте это....

    item['name'] = sel.xpath('//a/text()').extract()
    item['link'] = sel.xpath('//a/@href').extract()