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": []}

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

2 ответов


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

заменить a/text() С text() и a/@href С @href.

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


использовать это....

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