我想从不同的网页获取数据,例如餐厅的地址或给定位置的不同活动的日期等等。我可以用来从一组给定的站点中提取这些数据的最佳库是什么?

有帮助吗?

解决方案

如果使用 python,请仔细查看 Beautiful Soup (http://crummy.com/software/BeautifulSoup).

一个功能极其强大的库,使抓取变得轻而易举。

其他提示

面向 .net 程序员的 HTML Agility Pack 非常棒。它将网页转换为 XML 文档,可以使用 XPath 进行查询。

HtmlDocument doc = new HtmlDocument();
doc.Load("file.htm");
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a@href")
{
HtmlAttribute att = link"href";
att.Value = FixLink(att);
}
doc.Save("file.htm");

你可以在这里找到它。 http://www.codeplex.com/htmlagilitypack

我认为这里的一般答案是使用任何语言 + http 库 + html/xpath 解析器。我发现使用 ruby​​ + hpricot 提供了一个很好的干净的解决方案:

require 'rubygems'
require 'hpricot'
require 'open-uri'

sites = %w(http://www.google.com http://www.stackoverflow.com)

sites.each do |site|
  doc = Hpricot(open(site))

  # iterate over each div in the document (or use xpath to grab whatever you want)
  (doc/"div").each do |div|
    # do something with divs here
  end
end

有关 Hpricot 的更多信息,请参阅 http://code.whytheluckystiff.net/hpricot/

我个人喜欢 WWW::机械化 用于此类任务的 Perl 模块。它为您提供了一个模仿典型网络浏览器的对象(即您可以点击链接、填写表格或通过调用其上的方法来使用“后退按钮”)。

为了提取实际内容,您可以将其连接到 HTML::树构建器 将您当前访问的网站转换为一棵树 HTML::元素 对象,并提取你想要的数据( look_down() 的方法 HTML::Element 特别有用)。

我认为 watir 或 selenium 是最好的选择。大多数其他提到的库实际上是 HTML 解析器,但这不是你想要的......你正在抓取,如果网站的所有者希望你获取他的数据,他会将他的数据库或网站的转储放在 torrent 上,并避免所有的 http 请求和昂贵的流量。

基本上,您需要解析 HTML,但更重要的是自动化浏览器。这已经达到了能够移动鼠标并单击的程度,基本上是在模仿用户。您需要使用屏幕捕获程序来获取验证码并将其发送到 decaptcha.com(只需几分之一美分即可解决它们)以规避此问题。忘记通过解析 html 来保存验证码文件而不将其呈现在浏览器中“正如它应该看到的那样”。您正在抓取屏幕,而不是抓取httprequest。

watir 结合 autoitx(用于移动鼠标并在字段中输入按键 -> 有时这对于设置正确的 javascript 事件是必要的)和一个简单的验证码屏幕捕获实用程序为我解决了这个问题。这样你就会最成功,编写一个出色的 html 解析器来发现网站所有者已将一些文本转换为图形是毫无用处的。(有问题?不,只需获取 OCR 库并输入 jpeg,就会返回文本)。此外,我很少看到他们走得那么远,尽管在中文网站上,有很多图形文本。

Xpath 一直拯救了我的日子,它是一种很棒的领域特定语言(恕我直言,我可能是错的),您可以访问页面中的任何标签,尽管有时您需要调整它。

我错过的是“反向模板”(硒的机器人框架有这个)。Perl 在 CPAN 模块 Template::Extract 中有这个,非常方便。

html 解析,或者 DOM 的创建,我会留给浏览器,是的,它不会那么快,但它会一直工作。

此外,假装为用户代理的库是无用的,现在网站已受到保护以防止抓取,并且在真实屏幕上呈现网站通常需要超越验证码,而且还需要触发 javascript 事件才能显示信息等。

Watir 如果你喜欢 Ruby,那么我想说的是 Selenium。“人类模拟器”(或俄罗斯的网络模拟器)确实是为这种抓取而设计的,但话又说回来,它是来自一家毫不掩饰其意图的公司的俄罗斯产品。

我还认为这几周 Wiley 出了一本关于抓取的新书,应该很有趣。祝你好运...

我个人发现 http://github.com/shuber/curl/tree/masterhttp://simplehtmldom.sourceforge.net/ 非常适合在我的 PHP 抓取/抓取项目中使用。

珀尔 WWW::机械化 库非常适合完成与网站交互以到达您需要的实际页面的麻烦工作。

我会使用 LWP(Libwww for Perl)。这是一个很好的小指南: http://www.perl.com/pub/a/2002/08/20/perlandlwp.html

WWW::Scraper 这里有文档: http://cpan.uwinnipeg.ca/htdocs/Scraper/WWW/Scraper.html它可以用作基础,您可能希望创建自己的模块来满足您的餐厅挖掘需求。

LWP 将为您提供一个基本的爬虫供您构建。

有很多答案推荐 Perl Mechanize,但我认为 Ruby Mechanize(与 Perl 的版本非常相似)甚至更好。它在语法上以更简洁的方式处理一些东西,比如表单。此外,还有一些运行的前端 在上面 Ruby Mechanize 使事情变得更加容易。

您想使用什么语言?

使用 awk 卷曲可能就是您所需要的。

您可以使用 整齐的 将其转换为 XHTML,然后使用您选择的语言可用的任何 XML 处理工具。

我会推荐 美丽汤. 。它不是最快的,但对于大多数解析器遇到的 (X)HTML 页面格式不规范的问题,它的性能确实很好。

有人说的话。

使用任何语言。

只要你有一个好的解析器库和http库,你就准备好了。

树的东西比较慢,然后只使用一个好的解析库。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top