有没有其他方法可以从动态网站中提取数据,而不是使用硒?

Is there any other way to extract data from dynamic website, rather than using selenium?

我正在尝试从网站 https://shop.nordstrom.com/ 中提取所有产品(如衬衫、T 恤等)的数据。该页面是动态加载的。我知道我可以将 selenium 与无头浏览器一起使用,但这也是一个耗时的过程并且查找具有奇怪 ID 和 class 名称的元素,这也不太有希望。

所以我想查找网络工具,如果我能找到 API 的路径,从那里加载数据(XHR 请求)。但我找不到任何有用的东西。那么有没有办法从网站上获取数据呢?

如果您不想使用 selenium,那么替代方案是使用像 bs4 这样的网络解析器,或者只使用 request 模块。

找到对 API 的调用是正确的。 XHR 请求可以在 network 选项卡下看到,但是出现的大量资源使得理解正在发出的请求变得复杂。一个简单的解决方法是使用以下方法:

Instead of Network tab go to the console tab. There click on the settings icon, and then tick just the option Log XMLHTTPRequests.

现在刷新页面并向下滚动以启动动态调用。您现在将能够以更清晰的方式查看所有 XHR 的日志。

例如

(index):29 Fetch finished loading: GET "**https://shop.nordstrom.com/api/recs?page_type=home&placement=HP_SALE%2CHP_TOP_RECS%2CHP_CUST_HIS%2CHP_AFF_BRAND%2CHP_FTR&channel=web&bound=24%2C24%2C24%2C24%2C6&apikey=9df15975b8cb98f775942f3b0d614157&session_id=0&shopper_id=df0fdb2bb2cf4965a344452cb42ce560&country_code=US&experiment_id=945b2363-c75d-4950-b255-194803a3ee2a&category_id=2375500&style_id=0%2C0%2C0%2C0&ts=1593768329863&url=https%3A%2F%2Fshop.nordstrom.com%2F&zip_code=null**".

URL 发出获取请求会得到一堆 Json 对象。您现在可以使用此 url 和您可以派生的其他内容将请求直接发送到 URL.

请参阅关于如何将 url 与请求模块集成以获取数据的答案