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?
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)
utilisez ceci....
item['name'] = sel.xpath('//a/text()').extract()
item['link'] = sel.xpath('//a/@href').extract()