python - 使用 Scrapy 抓取与 Ajax 隐藏的尺寸相关的数据

标签 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 隐藏了。非常感谢对此的帮助。

最佳答案

问题是尺寸位于从不同网址加载的 iframe 内部。换句话说,首先,您需要从 iframesrc 属性获取 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/

相关文章:

python - 无法使用pygame在循环内连续播放mp3文件?

python - Flask + MySQL 奇怪的行为

python - Web抓取以在您的管中找到实时 View

JavaScript with Ajax with HTTP request outputs undefined display 2

javascript - 在确认删除之前进行 AJAX 检查

javascript - 数据提交到服务器时更改按钮

python - 为什么 Python3 中没有 xrange 函数?

xpath - EclipseLink Moxy unmarshall 和 getValueByXPath 给出 null

java - 为什么<xsl :value-of select ="1"/> returns 1?

php - XPath仅从元素内获取文本(PHP)