【问题标题】:Cant get image with xpath无法使用 xpath 获取图像
【发布时间】:2026-01-19 07:40:02
【问题描述】:

由于某种原因,我无法正确获取 XPath 并从 Nordstrom.com 获取产品图片,我正在使用 Scrapy,这是我的代码,strPicture 总是空的:

from scrapy.spider import Spider
from scrapy.selector import Selector
from bed2.items import bed2Item
import urlparse

class MySpider(Spider):
    name = "bed2"
    allowed_domains = ["nordstrom.com,"nordstromimage.com"]
    start_urls = ["http://shop.nordstrom.com/c/bedding-home?origin=leftnav#category=b60175057&type=category&marketingslots=2&page=1&defaultsize3=&size=&width=&color=&price=&brand=&instoreavailability=false&lastfilter=&sizeFinderId=0&resultsmode=&segmentId=0&sort=newest&sortreverse=0"]

def parse(self, response):
    hxs = Selector(response)
    titles = hxs.xpath("//div[@class='fashion-item']")
    items = []
    for titles in titles[:1]:
        item = bed2Item()
        item ["strTitle"] = titles.xpath("div[2]/a[1]/text()").extract()
        item ["strLink"] = urlparse.urljoin(response.url, titles.xpath("div[2]/a[1]/@href").extract()[0])
        item ["strPrice"] = "0"
        item ["strPicture"] = titles.xpath("a/div[1]/img/@src").extract()
        items.append(item)
    return items

我正在抓取的网址是:

http://shop.nordstrom.com/c/bedding-home?origin=leftnav#category=b60175057&type=category&marketingslots=2&page=1&defaultsize3=&size=&width=&color=&price=&brand=&instoreavailability=false&lastfilter=&sizeFinderId=0&resultsmode=&segmentId=0&sort=newest&sortreverse=0

试图获得第一个产品。

谢谢

【问题讨论】:

    标签: xpath scrapy


    【解决方案1】:

    查看源代码,在检索图片URL时找不到您要查找的锚标记。省略它。此外,加载页面后似乎发生了一些 JavaScript 魔法,图像 URL 存储在 @data-original 中。

    item ["strPicture"] = titles.xpath("div[1]/div/img/@data-original").extract()
    

    无论如何,由于该 div 中没有更多图片,为什么不直接查询 .//img/@data-original?同样适用于可以利用其类属性查询的标题,例如在.//a[@class='title']/text() 或更强大的data(.//a[@class='title'])

    【讨论】:

    • 感谢 Jens,关于 javascript 更改源代码的要点!