web-dev-qa-db-fra.com

Scrapy: Extraire des liens et du texte

Je suis novice dans le scrap et j'essaie de gratter la page Web du site Ikea. La page de base avec la liste des emplacements donnée ici .

Mon fichier items.py est donné ci-dessous:

import scrapy


class IkeaItem(scrapy.Item):

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

Et l'araignée est donnée ci-dessous:

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

En exécutant le fichier, je n'obtiens aucune sortie. La sortie du fichier json est quelque chose comme:

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

La sortie que je recherche est le nom de l'emplacement et le lien. Je ne reçois rien. Où vais-je mal?

17

Il y a une simple erreur dans les expressions xpath pour les champs d'élément. La boucle parcourt déjà les balises a, vous n'avez pas besoin de spécifier a dans les expressions xpath internes. En d'autres termes, vous recherchez actuellement des balises a à l'intérieur des balises a à l'intérieur des td à l'intérieur tr. Ce qui ne donne évidemment rien.

Remplacez a/text() par text() et a/@href avec @href.

(testé - fonctionne pour moi)

15
alecxe

utilisez ceci....

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