在 Python 中解析 HTML - 有些页面有效,有些无效...?

Parsing HTML in Python - Some pages work and some don't...?

使用以下脚本:

from lxml import html
import requests

gameUrl = 'http://store.401games.ca/catalog/2415520/caylus'
page = requests.get(gameUrl)
tree = html.fromstring(page.content)

stock = tree.xpath('//*[@id="stock"]/span[1]/div/*/text()')[0]

print stock

它将正确显示页面上列出的库存水平。 (此时1个)

gameUrl = 'http://store.401games.ca/catalog/2415324/ticket-to-ride'

它显示股票为 68,这是不正确的。 (我什至不知道 68 是从哪里来的)。

我用这个网站的很多页面试过这个,90% 的页面使用这个脚本都能正常工作。但是其他 10% 失败并给出随机数...有些完全不同,例如 68 而不是 30。或者 1100 而不是 30。有些更接近,例如 12 而不是 9。我不知道发生了什么。

有人知道问题出在哪里吗?

如果您在浏览器中打开页面,您会看到 Quantity: 68 在变为 Quantity: 30 之前闪烁。

起初,我以为有一个 XHR 请求在页面加载后从某个端点动态获取产品可用性,几乎开始提供有关浏览器自动化的通常答案,但这里的问题是不同的。

如果您在浏览器开发人员工具中打开“网络”选项卡,您可能会看到正在加载 store.js javascript 文件。在脚本的开头,可以看到:

if(stock>30) { $('div.availability span').text( "30" ); }
var instock = $('div.availability').text();
instock = instock.replace("In-Stock", "Quantity");

意思是,如果数量超过30,则"manually"设置为30。