我在尝试从下拉按钮获取数据时遇到了一些问题,但网站上的答案(或至少是您找到的答案)都没有帮助我。
我要抓取的网站是亚马逊,例如“耐克鞋”。
当我输入属于“耐克鞋”的产品时,我可能会得到这样的产品:
页面随附尺寸和颜色的位置。因此抓取很简单。
问题出在我得到这类产品时:
在我必须选择尺寸(也许是颜色)的地方,如果我选择不同的尺寸,价格也会改变。
我的问题是,是否有一种方法可以访问每个“鞋子尺码”,这样我至少可以检查该尺码的价格?
如果页面上有某种列表,并且源代码中的尺寸不那么难,但是当我选择尺寸时页面会更改,并且在源代码中没有鞋码的“列表”出现(同时URL不变)。
答案 0 :(得分:2)
大多数电子商务网站通过将json嵌入html并使用javascript加载适当的选择来处理变体。因此,一旦您抓取了html,就很可能拥有所有的变体数据。
在您的情况下,您会在html正文中嵌入鞋子的尺寸,价格等信息。如果您搜索足够唯一的变体名称,您将在正文中看到一些json:
现在您需要:
确定json部分在哪里:
它通常位于<script>
标记中或作为任何标记的data-<something>
属性的某个地方。
提取json部分:
如果直接嵌入到javascript中,则可以使用正则表达式清理提取它:
script = response.xpath('//script/text()').extract_frist()
import re
# capture everything between {}
data = re.findall(script, '(\{.+?\}_')
将json加载为dict并解析树,例如:
import json
d = json.loads(data[0])
d['products'][0]