我希望从以下网址中抓取与产品尺寸相关的详细信息:
我很难找到上页“选择尺码”下拉列表中的信息(7 - 有库存、7.5 - 有库存 5+ 等)
在调试器模式下,我可以查看代码中的位,并尝试使用以下 Xpath 来抓取它,但没有成功。
item["Sizes"] = sel.xpath("//select[@name='siz']/option/text()").extract()
我认为它们可能被 Ajax 隐藏了。非常感谢对此的帮助。
最佳答案
问题是尺寸位于从不同网址加载的 iframe
内部。换句话说,首先,您需要从 iframe
的 src
属性获取 url,然后向该 url 发出请求并提取尺寸。
演示(使用 scrapy shell
):
$ scrapy shell http://www.tennisexpress.com/k-swiss-mens-ultra-express-tennis-shoes-black-fade-and-electric-blue-38191
>>> from urlparse import urljoin
>>> url = 'http://www.tennisexpress.com/'
>>> path = response.xpath('//div[@id="prodPurchasing"]/iframe/@src').extract()[0]
>>> url = urljoin(url, path)
>>> fetch(url)
>>> response.xpath("//select[@name='siz']/option/text()").re(r'[\.0-9]+')
[u'7', u'7.5', u'8', u'8.5', u'9', u'9.5', u'10', u'10.5', u'11', u'11.5', u'12', u'13']
仅供引用,为了从选择选项中过滤掉实际尺寸,我在这里使用 re()
,请参阅:
[\.0-9]+
将匹配一个或多个数字或点。
关于python - 使用 Scrapy 抓取与 Ajax 隐藏的尺寸相关的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27343741/