【问题标题】:GoLang Scraper. How to scrape dynamically generated links on a website?GoLang 刮刀。如何抓取网站上动态生成的链接?
【发布时间】:2017-08-27 13:39:19
【问题描述】:

我正在尝试抓取产品视频链接(由另一个 Web 服务动态生成。位置在左侧的产品图像下方)。您可以查看以下链接, https://www.tokopedia.com/chocoapple/ready-stock-bnib-iphone-128gb-7-plus-jet-black-garansi-apple-1-tahun-10?src=topads 谷歌浏览器“检查元素”显示 div 标签。但是页面源中不存在相同的标签。 怎么做?我正在研究 goQuery 以实现该任务,但不确定它是否有效。我不是网络开发人员,所以如果我的问题描述不具体,请考虑提供建议。 谢谢。

【问题讨论】:

    标签: go web web-scraping web-crawler


    【解决方案1】:

    如果标签不在源代码中,那么 GoQuery 将不起作用。 GoQuery 用于使用类似 jQuery 的 API 解析 HTML 源代码。

    您需要首先使用 phantomjs、chromelesspuppeteer 等无头 WebKit 处理网页。这些工具中的每一个都允许您在处理网页上的所有 Javascript 之前对其进行处理。这样,用于渲染您感兴趣的视频的 AJAX 将被处理并更新源。然后您可以下载相应的源,其中应该包含 div。

    【讨论】:

    • 在 nodejs 世界中值得注意的是你也可以使用 nitghmarejs github.com/segmentio/nightmare
    • @schollz 使用无头 WebKit 处理网页,这是标准方式吗?此外,它会在性能方面大规模发挥作用吗?
    • @yogesh_desai 据我所知,这是标准方式。无头 webkits 利用浏览器进行渲染,我不知道另一种方法可以做到这一点。至于性能扩展,您可以考虑使用 chromeless,它可以让您通过 AWS Lambda 进行扩展
    • 性能是一个目标,而不是一个指标。不确定我们如何提供帮助,因为没有那么多可用的解决方案 afaik。 go 擅长并发,在这种情况下被证明对达到性能目标很有用。
    【解决方案2】:

    请找到下一个标签<img class="thumbnail-img horizontal" src="//i.ytimg.com/vi/oKR2fh09Nic/mqdefault.jpg">。如您所见,src 包含 ID“oKR2fh09Nic”。这是需要路径https://www.youtube.com/watch?v=oKR2fh09Nic

    另外,您可以使用http://youtube.com/get_video_info?video_id= oKR2fh09Nic 来加载视频信息。

    这里的例子https://github.com/kkdai/youtube/blob/master/youtube.go

    【讨论】:

    • 它适用于多个视频吗?作为链接,我分享了 4 个视频。另外,当你说找到下一个标签是什么意思?
    • 您提到的标签
    【解决方案3】:

    您可能需要像浏览器一样评估页面。正如 schollz 回答的那样,这可以通过所谓的无头浏览器(可通过 cli 或 api 使用的浏览器,不显示其 gui)来实现。

    在 Go 世界里有 chromedp

    https://github.com/knq/chromedp

    https://www.youtube.com/watch?v=_7pWCg94sKw

    【讨论】:

    • 谢谢,我一定会去看看并试一试。另外,请我对 schollz 的回答发表评论并提供更多详细信息。
    • 评估,意味着我需要通过chromedp加载页面吗?我将如何获得页面的更新源? chromedp 的哪些功能对我有用?有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 2015-07-04
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多