32

这可能是难以回答的问题之一,但这里有:

我不认为自己是程序员——但我想 :-) 我学过 R,因为我厌倦了 spss,而且因为一个朋友向我介绍了这门语言——所以我对编程逻辑。

现在我想学习python——主要是为了做屏幕抓取和文本分析,也为了用 Pylons 或 Django 编写 webapps。

那么:我应该如何学习使用 python 进行屏幕抓取?我开始浏览杂乱无章的文档,但我觉得有很多“魔法”正在发生——毕竟——我正在努力学习,而不仅仅是做。

另一方面:没有理由重新发明轮子,如果 Scrapy 是屏幕抓取 Django 对网页的意义,那么它可能值得直接跳入 Scrapy。你怎么看?

哦 - 顺便说一句:屏幕抓取的那种:我想抓取报纸网站(即相当复杂和大)以提及政治家等 - 这意味着我需要每天,增量和递归地抓取 - 我需要记录结果进入各种数据库——这让我想到了一个额外的问题:每个人都在谈论非 SQL 数据库。我应该立即学习使用例如 mongoDB(我认为我不需要强一致性),还是对于我想做的事情来说这很愚蠢?

感谢您的任何想法 - 如果这通常被视为编程问题,我深表歉意。

4

6 回答 6

47

我同意 Scrapy 文档给人的印象。但是,我相信,正如我自己发现的那样,如果你对 Scrapy 有耐心,并且先阅读教程,然后埋头于文档的其余部分,你不仅会开始更好地理解 Scrapy 的不同部分,但你会明白为什么它会以它的方式做它做的事情。它是一个真正意义上的框架,用于编写蜘蛛和屏幕抓取器的框架。您仍然必须学习 XPath,但我发现无论如何都最好学习它。毕竟,您确实打算抓取网站,而了解 XPath 是什么以及它是如何工作的只会让事情变得更容易。

例如,一旦您了解了pipelinesScrapy 中的概念,您将能够体会到使用报废物品做各种事情是多么容易,包括将它们存储到数据库中。

BeautifulSoup是一个很棒的 Python 库,可以用来抓取网站。但是,与 Scrapy 相比,它无论如何都不是一个框架。对于小型项目,您不必花时间编写适当的爬虫,也不必处理大量数据的报废,您可以使用 BeautifulSoup。但除此之外,你只会开始欣赏 Scrapy 提供的那种东西。

于 2010-12-01T19:58:48.373 回答
11

看起来 Scrappy 正在使用 XPATH 进行 DOM 遍历,这本身就是一种语言,在一段时间内可能会感觉有些神秘。我认为 BeautifulSoup 会给你一个更快的开始。使用 lxml,您将不得不投入更多时间学习,但它通常(不仅是我)认为是 BeautifulSoup 的更好替代品。

对于数据库,我建议你从 SQLite 开始并使用它,直到你碰壁并需要更具可扩展性的东西(这可能永远不会发生,取决于你想用它走多远),此时你会知道哪种您需要的存储空间。Mongodb 在这一点上绝对是矫枉过正,但熟悉 SQL 是一项非常有用的技能。

这是我前段时间给出的一个五行示例,用于说明可以使用BeautifulSoup。 哪种是编写网络机器人的最佳编程语言?

于 2010-12-01T19:46:15.977 回答
3

我真的很喜欢 BeautifulSoup。我对 Python 还很陌生,但发现开始屏幕抓取相当容易。我写了一个关于用漂亮的汤刮屏的简短教程。我希望它有所帮助。

于 2012-09-02T22:02:08.797 回答
2

根据问题的数据库部分,为工作使用正确的工具。弄清楚你想做什么,你想如何组织你的数据,你需要什么样的访问等等。然后决定一个 no-sql 解决方案是否适用于你的项目。

我认为 no-sql 解决方案适用于各种不同的应用程序。我们已经在我过去 20 年在 SQL 数据库内部从事的各种项目中实现了它们,而没有将其称为 no-sql,因此应用程序存在。因此,至少值得了解他们提供的产品以及迄今为止哪些产品运行良好的背景。

设计好你的项目,保持持久层分开,如果你认为这是必要的,你应该能够改变你的数据库解决方案,而只是轻微的心痛。

于 2010-12-01T19:54:24.933 回答
2

我建议在学习时从较低级别开始——scrapy 是一个高级框架。阅读一本好的 Python 书籍,例如Dive Into Python,然后查看用于解析 HTML的lxml 。

于 2010-12-03T04:22:31.103 回答
0

在深入 Scrapy 之前,先了解一下 Udacity 的计算机科学简介:https ://www.udacity.com/course/cs101

这是熟悉 Python 的好方法,一旦你掌握了一些 Python 的基本知识,你实际上会更快地学习 Scrapy。

于 2013-12-12T16:32:33.053 回答