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

时间:2016-02-06 02:14:35

标签: python parsing xpath python-requests lxml

使用以下脚本:

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.我不知道发生了什么。

有没有人知道可能是什么问题?

1 个答案:

答案 0 :(得分:3)

如果您要在浏览器中打开该页面,则会看到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,那就是"手动"设置为30。