【问题标题】:How can I crawl the web to find links / sites around a topic?如何抓取网络以查找围绕某个主题的链接/站点?
【发布时间】:2017-02-14 02:36:21
【问题描述】:

我真的不知道从哪里开始这个项目,所以请原谅模糊的标题。

当我在谷歌上搜索“如何编程”时,我希望以某种可行的形式获得该搜索的结果。我不知道我是否可以以某种方式使用谷歌或其他搜索,但如果不能,我如何构建自己的软件来获取这些数据?谷歌如何运行它的搜索?

我知道 JavaScript 和 NodeJS - 我还需要学习什么? (我想肯定是某种数据库)。

【问题讨论】:

    标签: node.js web-crawler bigdata


    【解决方案1】:

    MongoDB (mongoose) 用于存储您的数据,PhantomJS(用于服务器端的无头浏览器)用于抓取将是您的最佳选择。我目前正在开发一个网络爬虫,用于结合两者来爬取网站。效果很好。

    您将要使用 PhantomJ 加载 google,输入您的搜索,然后从页面中获取 html。然后,您可以使用 cheerio 之类的库来处理 HTML。它是一个类似于 DOM 解析的服务器端 jquery 库。

    然后只需浏览并单击下一页结果并根据需要重复上述步骤。从每个页面收集您需要的信息并将其存储在 mongo 中。

    您还需要担心很多其他事情,例如如何处理验证码、IP 阻塞等。但以上内容应该可以帮助您入门。

    【讨论】:

    • 我想我的主要问题是:Google 如何知道要抓取哪些网站?我知道一旦你有了一个链接,你就可以找到其中的页面并爬取 HTML,但是我怎么知道存在的所有网站的宇宙呢?
    • Google 可能会在其他网站上找到指向其他网站的链接(这些称为backlinks)。然后,他们将要抓取的新网站添加到一个大队列中。他们还可能会查找新网站的新 DNS 记录并添加要抓取的内容。
    • 因此,您需要一个指定数量的排名网站列表,用于搜索查询“如何编程”。您的最终目标是否只是所有链接的列表?或者您想爬取每个​​单独的站点以获取某种数据?只需考虑几个问题。
    • 有趣。我不知道谷歌是如何确定要索引哪些网站的,但从你所说的来看,这听起来像是一个更像是艺术而不是科学的手动过程?也就是说,从技术上讲,他们可能会错过 obbotoodala.com,即使它存在,但不知何故,谷歌没有看到它的 DNS 记录/尚未从另一个站点链接。
    • 这是我的想法:抓取可能对特定目标有价值的链接:“学习如何编程”,然后对其运行某种算法以减少链接总数,然后我想要对其进行一些手动管理 - 最终目标是找到最佳链接。这与 Google 本身有何不同?因为我想专注于识别可操作的链接或网站,而不仅仅是纯粹的信息或知识。
    猜你喜欢
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 2021-06-01
    • 1970-01-01
    相关资源
    最近更新 更多