从各种网页创建数据库?

时间:2013-06-01 01:18:05

标签: java python database web web-scraping

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

我想知道如何做这样的事情,但我从未在默认库之外编程。我不知道如何开始我的方法。

示例:

  

我在一个看起来有点像的名单上输入了一大堆大学   此

     

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

     

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

     

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

     

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

     

然后将其存储在一个可用于分析和填充的类中

这样的事情是否可能?我记得在社交网络上看过类似的节目。我该怎么做呢?

4 个答案:

答案 0 :(得分:0)

当然有“一种方式”。但是没有简单方法

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

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

答案 1 :(得分:0)

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

1)DOM模型(HTML)的基础知识,因此您可以解析页面 2)服务器和数据库如何工作的一般概念(以及如何在python中与它们进行交互 - 我使用的或java) 3)2的子部分的排序:学习如何从服务器检索HTML文档然后解析

然后,一旦你这样做,这就是程序要经历的程序:

1)您需要提供要搜索的页面列表。如果你想搜索和整个网站,你需要缩小范围。您可以轻松地将程序限制为仅搜索某些类型的论坛,这些论坛在大学理事会中都具有相同的格式。您还需要添加部分程序,以构建程序找到链接的网页列表。对于瞬间,如果大学写的网页上有一大堆带有统计信息的不同网页的链接,那么您希望您的程序扫描该网页以查找指向这些统计信息的网页的链接。

2)您需要找到包含所需信息的HTML标记的ID,位置或某些标识标记。如果你想获得真正的花哨(我的意思真的很花哨)你可以尝试使用一些算法来解析文本并尝试获取信息(可能试图解析入场统计数据和论坛上的文本内容)

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

是有意义的

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

1)正如有人已经评论过的那样,您需要为每个单独的网页格式找出第2步。 (通过网页格式,我指的是不同布局的不同页面。堆栈溢出主页与此页面不同,但所有问题页面都遵循相同的格式)

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

3)当您完成该计划时,您可能很容易自己收集信息。

替代和不太酷的选项

您可以只搜索网页并提取其所有文字,然后尝试查找与大学相关的文字中的关键词,而不是经历所有麻烦或在网页上搜索特定信息。

但等等,这已经成功了!它被称为谷歌:)。这基本上就是谷歌的工作方式,所以......呀。

答案 2 :(得分:0)

这里你要问的是scraping,一般来说 做得对,这很棘手。你必须担心一堆 事情:

  1. 数据的格式是显示,而不是程序化消费。 它可能是凌乱的,不一致的或不完整的。
  2. 可能有动态内容,这意味着您可能需要运行 JavaScript VM或其他东西只是为了获得页面的最终状态。
  3. 格式可能经常改变。
  4. 所以我要说你应该做的第一件事就是看看你是否可以访问 在你采取刮擦之前的其他方式的数据。如果你四处寻找 在这些页面的源代码中,您可能会找到一个Web服务提供数据 以XML或JSON显示图层。那将是一个更好的地方 开始。

答案 3 :(得分:0)

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

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

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

但是id =(1-3972)。

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

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

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

相关问题