【问题标题】:Dynamic scraping and parsing [closed]动态抓取和解析[关闭]
【发布时间】:2012-02-09 19:07:23
【问题描述】:

原问题改写:

我非常了解 PHP、Js、CSS、OOP,最近通过使用 vim 编辑器的 netrw 和 elinks 插件来下载一系列经过解析和准备好的网页(大约一百万行),从而磨练了我的正则表达式技能上传到我的网站。我在一个 linux/ubuntu 系统上工作,一个 localhost 设置,这个特定的项目正在实现 Concrete5 cms——它是用 PHP 编写的。

看到抓取和解析信息的好处,我想让我的网站动态地执行此功能,尽管规模要小得多;例如,使我的新用户能够将他们的个人信息从另一个网站转移到我的网站上——这通常是在安全连接(尽管并非总是如此)和密码下。

问题:什么是最好的工具(脚本语言)用于此?我不知道 Perl 或 Ruby,但我相信其中任何一个都是不错的选择。我也听说过 AWK 和 SED。我敢肯定,一旦我开始学习这门语言,我就能弄清楚该怎么做。我真的很感激一些有经验的意见,关于哪种语言最适合开始投入我的时间来学习它。

感谢您的帮助。

【问题讨论】:

  • 描述太模糊了,很难理解你到底想实现什么,涉及到谁的系统以及数据从哪里到哪里。您忽略了解释 Netra 和 netrw。 – 无需编辑器就可以自动进行站点抓取/解析,实际上 Perl 和 Ruby 擅长这项任务。 Stack Overflow is meant for specific questions,把你的问题分解成小块。
  • 你为什么使用 vim 而不是一些脚本语言?还是直接使用elinks,然后用sed解析输出?虽然使用 vim 可能是可能的,但有更好的工具来做这样的事情。
  • 您在标签中说“perl”。为什么不使用 LWP 和 HTML::Parser?
  • @daxim 我从其他人那里得到的 cmets 有助于缩小我对自己需求的理解——因此首先是这个问题。 Netrw 和 elinks 是 vim 编辑器的插件。
  • @DavidBrown 我使用 vim 解析了一百万行代码,使用它教会了我正则表达式模式以及如何执行这样的步骤。在考虑根据 OP 实现动态抓取/解析内容的想法时,我认为会有更好的方法 - 例如 Perl 或 Ruby。我对这两种语言都没有经验,但我可能会很快掌握我在 vim 中所做的 PHP 和正则表达式工作的知识(我理解这在其他语言中略有不同,但差别不大)。您能否建议哪些工具最适合完成 OP?

标签: ruby regex perl vim scripting


【解决方案1】:

据我所知,Perl 有两个非常好的即用型抓取工具:Web::ScraperScrappy。两者都能够使用 CSS3 和 XPath 选择器来识别元素; Scrappy 建立在 Web::Scraper 之上,并添加了集成的抓取和爬取功能,并带有一个很好的 URL 匹配系统来选择要遵循的链接以收集更多信息(而 Web::Scraper 则适用于单个文档)。它使用成熟且健壮的WWW::Mechanize 库在页面之间移动,该库智能、可靠并且可以识别身份验证和cookie。

如果您想自己进入较低级别,有很多不错的工具可以构建,包括前面提到的 WWW::Mechanize、HTML::TreeBuilderHTML::TreeBuilder::XPathHTML::TableExtractor 等等。

【讨论】:

  • 感谢您提供此信息,@hobbs 对于提取较少量的内容,这似乎可以正常工作。在一个更大的提取过程中,我让 vim 使用它的标记功能以间隔循环遍历文档的各个方面 - 本质上是通过从文档中的各个点对它们进行分组并将它们放在一起上传的最终字符串来构建信息 - 循环几千次。使用 Perl(?) 动态执行它看起来不太可能(但我仍在阅读。)谢谢你让我开始。
  • 哇!我说得太早了(我想)。 @hobbs 我一直在阅读有关 Perl、perlmods 和您提到的模块的信息。我感谢您的指导。如果可能,您能否发布有关如何访问页面、获取 DOM 的 xpath 并将值分配给变量的说明?只是入门课程。我在扣动扳机时遇到问题。 :) 再次感谢。
【解决方案2】:

我强烈推荐RubyCapybara 用于网络抓取。 (请参阅水豚页面底部的非测试相关示例)。原因:

  • 简单、简短的抓取语法、cookie 支持、js 支持。

  • Ruby 有许多其他用途、友好的语法和活跃的就业市场。

  • Capybara 有多个受支持的驱动程序。您可以运行一个真正的浏览器(可见),一个真正的无头浏览器(不可见),以便 javascript 站点工作。使用相同的代码,您可以切换驱动程序以在没有 js(机械化)的情况下运行 http 请求以提高速度。这可以帮助您克服许多障碍(例如需要运行 JS/Ajax)、需要查看交互等,只需更改一行代码 (Capybara.current_driver = :some_driver)。

驱动程序:Capybara-WebkitCapybara-Mechanize

  • 能够使用 CS 或 Xpath 选择器,无论您喜欢什么。

  • 积极的发展,以及围绕底层技术快速发展的生态系统。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 2015-06-11
    • 2019-12-25
    • 1970-01-01
    • 2015-03-27
    • 2020-11-27
    相关资源
    最近更新 更多