抓取页面源的可靠方法,即每行开头的电视?

时间:2017-07-16 14:56:42

标签: html css xpath web-scraping

提取数据时,您可以使用CSS / xpaths。但是在页面源中是否有类似或可靠的方法。

www.amazon.com/Best-Sellers-Electronics-Televisions/zgbs/electronics/172659

您可以获取页面源,然后使用Regex进行解析,但如果电视没有加载到页面上则可能不可靠。我已经查找了各种解决方案,但我还没有找到一个提到每一行开头的每台电视(1,4,4等等,在源代码中)或使用可靠的方法,例如页面源中的Css / xpaths。

做我所追求的可靠方法的黄金标准是什么?

1 个答案:

答案 0 :(得分:0)

要获取页面源,如果页面完全在服务器端呈现(大多数页面不是),则可以使用CURL,或者无头镀铬以获取将在浏览器中呈现的实际DOM(https://developers.google.com/web/updates/2017/04/headless-chrome )。

为了抓取内容,我使用了cheerio(https://github.com/cheeriojs/cheerio),它允许你用HTML读取一个对象,然后使用jQuery表达式删除你的数据。 (Headless chrome允许您在您访问的页面上执行JS,因此您不一定需要cheerio)。

在您的具体示例中,您可以通过组合正确的类选择器来获取包含电视的div,并使用带有'margin-left = 0px'的属性选择器来获得每行的电视,这将获得每行的第一项。这显然与页面结构有很大关系,并且很可能会被页面源中的最小变化所打破。 (与使用xpaths并没有什么不同。但仍然比正则表达式更好)

在页面上加载/未加载某些元素(如果那是你所说的电视不在那里),除了允许页面加载和处理刮板的足够时间之外,没有任何黄金解决方案优雅地失败