初学者通过 Python 学习屏幕抓取的最佳方式 [关闭]

Posted

技术标签:

【中文标题】初学者通过 Python 学习屏幕抓取的最佳方式 [关闭]【英文标题】:Best way for a beginner to learn screen scraping by Python [closed] 【发布时间】:2011-05-18 17:09:50 【问题描述】:

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

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

现在我想学习 python - 主要是做屏幕抓取和文本分析,但也用于使用 Pylons 或 Django 编写 web 应用程序。

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

另一方面:没有理由重新发明***,如果 Scrapy 要像 Django 对网页一样进行屏幕抓取,那么直接跳入 Scrapy 可能还是值得的。你怎么看?

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

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

【问题讨论】:

在创建好的爬虫程序时有一点可以帮助您,那就是您对 HTTP/Web(Cookie、重定向等)的了解;) 不是对您问题的直接回答,但您可能想观看此视频:youtube.com/watch?v=52wxGESwQSA 它涵盖了许多有关屏幕抓取的更高级主题。它是从 python 的角度出发的,但在大多数情况下,它是根据理论来实现的,并且很大程度上与语言无关。 【参考方案1】:

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

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

这是我前段时间给出的一个五行示例来说明可以使用锄头 BeautifulSoup。 Which is the best programming language to write a web bot?

【讨论】:

这是一个非常酷的 5 行示例。根据ayaz的回答,我认为框架解决方案可能是我前进的方式-但对于简单网页上的简单工作,您的示例很简单。谢谢你。也感谢您的 DB 建议。 cababunga:我决定接受 ayaz 的回答,但实际上是你们和 ayaz 一起让我去刮痧——你们每个人都给出了不同的理由。我对你的 beautifulsoup 示例感到非常满意。 lxml 被认为是 BeautifulSoup 的更好替代品?我已经使用了一些 lxml 和 BeautifulSoup,我发现 BeautifulSoup 使用起来更加友好。诚然,它没有 XPath 的紧凑性,但使用起来非常棒。而且因为您真的在 Python 中工作,所以在 BeautifulSoup 中无法使用 XPath 完成的一些事情比使用 lxml 简单得多。【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

这是一个很好的答案ayaz。谢谢你。明天我将再次访问scrapy docs(在丹麦已经过了午夜)【参考方案4】:

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

【讨论】:

【参考方案5】:

我真的很喜欢 BeautifulSoup。我对 Python 还很陌生,但发现开始屏幕抓取相当容易。我在screen scraping with beautiful soup 上写了一个简短的教程。希望对你有帮助。

【讨论】:

你的教程太简短了,你应该把它包括在这里作为答案。【参考方案6】:

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

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

【讨论】:

以上是关于初学者通过 Python 学习屏幕抓取的最佳方式 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

python学习(十五) 屏幕抓取

Python网络爬虫学习建议,初学者需要哪些准备

使用 Python 进行屏幕抓取

如何以编程方式搜索 CNN 头条新闻的存档?

python之屏幕抓取

简洁易懂,初学者挑战学习Python编程30天