提取数据时,您可以使用 CSS/xpaths。但是在页面源代码中是否有类似或可靠的方法来执行此操作。
www.amazon.com/Best-Sellers-Electronics-Televisions/zgbs/electronics/172659
您可以获取页面源,然后使用 Regex 进行解析,但如果电视未加载到页面上,则可能不可靠。我已经查找了各种解决方案,但我还没有找到一个提到在每一行的开头获取每台电视(源代码中的 1、4、7 等)或使用可靠的方法,例如页面源代码中的 Css/xpaths。
做我想做的事情的可靠方法的黄金标准是什么?
最佳答案
要获取页面源,如果页面完全在服务器端呈现(大多数页面不会),您可以使用 CURL,或者使用 headless chrome 获取将在浏览器中呈现的实际 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 并没有什么不同。不过仍然比正则表达式好)
某些元素在页面上加载/未加载(如果那是你所说的电视不存在的意思),我所知道的没有黄金解决方案,除了为页面加载留出足够的时间并优雅地处理你的爬虫失败.
关于html - 抓取页面源代码的可靠方法,即每行开头的电视?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45129962/