【问题标题】:Creating a database from various web pages? [closed]从各种网页创建数据库? [关闭]
【发布时间】:2013-06-01 01:18:04
【问题描述】:

有没有一种方法可以使用 java 或 python 以某种方式从大学板等网站上的大量不同大学收集大量信息?

我想知道如何做这样的事情,但我从来没有真正在默认库之外进行过编程。我不知道如何开始我的方法。

例子:

我在一个看起来有点像 这个

https://bigfuture.collegeboard.org/print-college-search-results

代码然后找到每个学院的页面,例如

https://bigfuture.collegeboard.org/college-university-search/alaska-bible-college?searchType=college&q=AlaskaBibleCollege

然后从页面收集信息,例如学费、大小等。

然后将其存储在我可以用于分析和东西的类中

这样的事情可能吗?我记得在社交网络中看到过类似的程序。我该怎么办?

【问题讨论】:

    标签: java python database web web-scraping


    【解决方案1】:

    所以,简短的回答,是的。这是完全可能的,但你需要先学习一堆东西:

    1) DOM 模型 (HTML) 的基础知识,以便您可以解析页面 2)服务器和数据库如何工作的总体思路(以及如何在python中与它们交互——我使用的是什么,或者java) 3) 类似于 2 的小节:了解如何从服务器检索 HTML 文档然后进行解析

    那么,一旦你这样做了,这就是程序必须经历的过程:

    1) 您需要列出要搜索的页面。如果要搜索整个网站,则需要缩小范围。您可以轻松地将您的程序限制为仅搜索某些类型的论坛,这些论坛在大学理事会上都具有相同的格式。您还需要添加程序的一部分,以构建您的程序找到链接的网页列表。例如,如果 Collegeboard 有一个页面,其中包含大量指向具有统计信息的不同页面的链接,您会希望您的程序扫描该页面以找到指向具有这些统计信息的页面的链接。

    2) 您需要找到包含所需信息的 HTML 标记的 ID、位置或某些识别标记。如果您想获得真正的花哨(我的意思是非常花哨),您可以尝试使用一些算法来解析文本并尝试获取信息(也许尝试解析录取统计数据和论坛文本中的内容)

    3) 然后,您需要将该信息存储在数据库中,然后索引该数据库并创建一个界面以进行搜索(如果您希望这整个过程都在线,我建议使用 python 框架 Django 使其成为 Web 应用程序)。对于数据库类型,使用Sqlite 3(I)会有意义

    是的,完全有可能,但坏消息是:

    1) 正如有人已经评论过的那样,您需要为您所做的每种网页格式找出第 2 步。 (网页格式是指不同的页面,不同的布局。栈溢出首页和这个页面不同,但是所有的问题页面都遵循相同的格式)

    2) 您不仅需要为每个新网站重复第 2 步,而且如果网站进行了重新设计,您还必须重新设计。

    3) 当您完成该程序时,您可能已经很容易自己收集了信息。

    另类且不那么酷的选项

    您可以搜索网页并提取其所有文本,然后尝试在与大学相关的文本中查找关键字,而不是费尽心思或在网页上搜索特定信息。

    但是等等,已经有一些东西可以做到这一点!它被称为谷歌:)。这基本上就是谷歌的工作方式,所以......是的。

    【讨论】:

    • 非常感谢。我知道这并不容易,但我希望能够在某种程度上“钓鱼”这样的海量信息。我觉得在很多情况下它都有用。
    • 我刚刚在帖子中添加了一些内容。您知道,您将无法将此程序应用于其他类型的信息。每次您想要制作这样的东西时,您都必须花费数小时甚至数天的时间,找到您想要从中获取信息的每个站点,绘制出整个内容并进行搜索。
    • 刚刚添加了一个“另类且不太酷的选项”。请注意,当有人回答您的问题时,您可以勾选旁边的支票。并不是说我已经回答了你的问题,但是如果有人回答了,请打勾。
    【解决方案2】:

    当然有“方法”。但是没有简单的方法

    您需要编写一堆代码,从 HTML 中提取您感兴趣的内容。然后,您需要编写代码将该信息转换为与您的数据库架构匹配的表单……并进行数据库更新。

    有一些工具可以帮助解决部分问题;例如用于获取页面的网络爬虫框架、用于解析 HTML 的 JSoup、如果页面是“动态”的 Javascript 引擎等。但我不知道有什么可以完成整个工作。

    【讨论】:

      【解决方案3】:

      您在这里询问的内容称为scraping,一般来说 做对是相当棘手的。你必须担心一堆 事情:

      1. 数据已格式化以供显示,而非以编程方式使用。 它可能混乱、不一致或不完整。
      2. 可能存在动态内容,这意味着您可能需要运行 JavaScript VM 或其他东西只是为了获取页面的最终状态。
      3. 格式可能经常发生变化。

      所以我想说你应该做的第一件事是看看你是否可以访问 在您使用抓取之前以其他方式获取数据。如果你四处逛逛 在这些页面的源代码中,您可能会发现一个 Web 服务提供数据 以 XML 或 JSON 格式发送到显示层。那将是一个更好的地方 开始。

      【讨论】:

        【解决方案4】:

        好的,谢谢大家的帮助。这就是我最终如何做到的。我花了一点时间,但幸运的是,collegeboard 使用非常简单的地址。

        基本上有 3972 所大学,每所大学都有一个独特的纯文本页面,其地址如下:

        https://bigfuture.collegeboard.org/print-college-profile?id=9

        但 id=(1-3972)。

        使用一个名为 HTMLunit 的库,我能够访问所有这些页面,将它们转换为字符串,然后使用 indexOf 收集信息。

        处理所有这些仍然需要大约 16 个小时,但我已经保存了大约 100 个。

        也许我在打印页面上很幸运,但我得到了我需要的东西,感谢您的帮助!

        【讨论】:

          猜你喜欢
          • 2012-11-20
          • 2012-03-19
          • 2015-11-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-28
          相关资源
          最近更新 更多