使用Scrapy来抓取与Ajax隐藏的大小相关的数据

时间:2014-12-07 14:38:28

标签: python ajax xpath web-scraping scrapy

我希望从以下网址中删除与产品尺寸相关的详细信息:

http://www.tennisexpress.com/k-swiss-mens-ultra-express-tennis-shoes-black-fade-and-electric-blue-38191

我在查找上页选择尺寸下拉列表中的信息时遇到困难(7 - 有货,7.5 - 有库存5+等)

在调试器模式下,我可以查看代码中的位,并尝试使用以下Xpath抓取它,但没有运气。

item["Sizes"] = sel.xpath("//select[@name='siz']/option/text()").extract()

我认为他们可能被Ajax隐藏了。希望对此有所帮助。

1 个答案:

答案 0 :(得分:1)

问题是这些尺寸位于从不同网址加载的iframe内。换句话说,首先,您需要从iframe的{​​{1}}属性中获取网址,然后向该网址发出请求并提取尺寸。

演示(使用scrapy shell):

src

仅供参考,要从选择选项中筛选出实际尺寸,我在这里使用$ 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()会匹配一个或多个数字或点。