我正在考虑尝试Beautiful Soup,一个用于HTML抓取的Python包 . 我应该看看还有其他HTML抓包吗? Python不是必需的,我实际上也有兴趣了解其他语言 .
到目前为止的故事:
-
Python
-
Ruby
-
.NET
-
Perl
-
Java
-
JavaScript
-
PHP
-
其中大部分
我正在考虑尝试Beautiful Soup,一个用于HTML抓取的Python包 . 我应该看看还有其他HTML抓包吗? Python不是必需的,我实际上也有兴趣了解其他语言 .
到目前为止的故事:
Python
Ruby
.NET
Perl
Java
JavaScript
PHP
其中大部分
30 回答
来自Adrian Holovaty(Django成名)的templatemaker实用程序使用了一种非常有趣的方法:您可以将相同页面的变体提供给它"learns",其中"holes"为变量数据 . 它's not HTML specific, so it would be good for scraping any other plaintext content as well. I'也用于PDF和HTML转换为明文(分别用pdftotext和lynx) .
我首先会发现有问题的网站是否提供API服务器或RSS源以访问您需要的数据 .
Ruby世界's equivalent to Beautiful Soup is why_the_lucky_stiff' s Hpricot .
在.NET世界中,我推荐HTML Agility Pack . 不像上面的一些选项(如HTMLSQL)那么简单,但它非常灵活 . 它可以让你设计形式不佳的HTML,好像它是格式良好的XML,所以你可以使用XPATH或只是迭代节点 .
http://www.codeplex.com/htmlagilitypack
BeautifulSoup是HTML抓取的好方法 . 我以前的工作让我做了很多刮,我希望当我开始时我知道BeautifulSoup . 它就像DOM有更多有用的选项,而且更加pythonic . 如果你想尝试Ruby,他们移植了BeautifulSoup,称之为RubyfulSoup,但它有一段时间没有更新 .
其他有用的工具是HTMLParser或sgmllib.SGMLParser,它们是标准Python库的一部分 . 这些工作通过每次进入/退出标签并遇到html文本时调用方法 . 如果你熟悉它们,他们就像Expat . 如果要解析非常大的文件并且创建DOM树会很长且很昂贵,这些库特别有用 .
正则表达式不是很必要 . BeautifulSoup处理正则表达式,所以如果你需要它们的力量,你可以在那里使用它 . 除非你需要速度和更小的内存占用,否则我说要使用BeautifulSoup . 如果您在Python上找到更好的HTML解析器,请告诉我 .
我发现HTMLSQL是一个非常简单的屏幕抓取方式 . 使用它需要几分钟才能得到结果 .
查询非常直观 - 如:
现在有一些其他替代方法采用相同的方法 .
Python lxml库充当libxml2和libxslt库的Pythonic绑定 . 我特别喜欢它的XPath支持和内存XML结构的漂亮打印 . 它还支持解析损坏的HTML . 而且我认为你不能找到比lxml更快解析XML的其他Python库/绑定 .
对于Perl,有WWW :: Mechanize .
'简单的HTML DOM Parser'是PHP的一个很好的选择,如果您熟悉jQuery或JavaScript选择器,那么您会发现自己在家 .
Find it here
There is also a blog post about it here.
为什么还没有人提到Java的JSOUP? http://jsoup.org/
除了Beatiful Soup之外,Python还有几种HTML抓取选项 . 以下是其他一些内容:
mechanize:类似于perl
WWW:Mechanize
. 为您提供类似浏览器的浏览器以便与网页进行混合lxml:Python绑定到
libwww
. 支持遍历和选择元素的各种选项(例如XPath和CSS选择)scrapemark:使用模板从HTML中提取信息的高级库 .
pyquery:允许您对XML文档进行类似jQuery的查询 .
scrapy:高级抓取和网络抓取框架 . 它可用于编写蜘蛛,数据挖掘以及监控和自动化测试
我知道并且爱Screen-Scraper .
Screen-Scraper是一种从网站中提取数据的工具 . Screen-Scraper自动化:
常用用途:
技术:
三版屏幕刮刀:
Perl的另一个选择是Web::Scraper,它基于Ruby的Scrapi . 简而言之,通过简洁明了的语法,您可以直接在数据结构中获得强大的scraper .
使用Shoes和Hpricot时,刮擦堆栈溢出尤其容易 .
在Java中我用HtmlUnit取得了一些成功 . 它's a simple framework for writing unit tests on web UI',但对于HTML抓取同样有用 .
Yahoo! Query Language or YQL can be used alongwith jQuery, AJAX, JSONP to screen scrape web pages
.NET的另一个工具是MhtBuilder
也有这个解决方案:netty HttpClient
我在Ruby上使用Hpricot . 作为示例,这是一段代码,我用它来检索我的HireThings帐户的六个页面中的所有书名(因为它们似乎不提供包含此信息的单个页面):
它非常完整 . 之前的所有内容都是库导入和我的代理的设置 .
我在Python中经常使用Beautiful Soup . 它比正则表达式检查要好得多,因为它就像使用DOM一样,即使HTML格式不正确也是如此 . 您可以使用比正则表达式更简单的语法快速查找HTML标记和文本 . 一旦找到一个元素,就可以迭代它及其子元素,这对于理解代码中的内容比使用正则表达式更有用 . 我希望美丽的汤在几年前就已经存在了,当时我不得不做大量的屏幕分析 - 这会让我节省很多时间和头痛,因为HTML结构在人们开始验证之前是如此糟糕 .
虽然它是为.NET网页测试而设计的,但我一直在使用WatiN框架 . 由于它是基于DOM的,因此很容易捕获HTML,文本或图像 . 接下来,我用它将MediaWiki All Pages命名空间查询中的链接列表转储到Excel电子表格中 . 以下VB.NET代码片段非常粗糙,但它有效 .
HTML5 parsing algorithm的实现:html5lib(Python,Ruby),Validator.nu HTML Parser(Java,JavaScript; C in development),Hubbub(C),Twintsam(C#;即将发布) .
你不会使用Perl是个傻瓜..这里来了火焰..
将以下模块和ginsu砸到任何地方 .
我在Perl中使用了LWP和HTML::TreeBuilder,发现它们非常有用 .
LWP(libwww-perl的缩写)允许您连接到网站并抓取HTML,you can get the module here和O'Reilly的书seems to be online here .
TreeBuilder允许您从HTML构建树,并且documentation and source are available in HTML::TreeBuilder - Parser that builds a HTML syntax tree .
尽管如此,可能还有太多繁重的事情要做 . 我没有看过另一个答案提出的Mechanize module,所以我可能会这样做 .
在Java中,您可以使用TagSoup .
好吧,如果你只想使用浏览器从客户端完成它,那么你就有jcrawl.com . 在从Web应用程序(http://www.jcrawl.com/app.html)设计了报废服务之后,您只需将生成的脚本添加到HTML页面即可开始使用/显示您的数据 .
所有报废逻辑都通过JavaScript在浏览器上发生 . 希望对你有帮助 . 单击此链接以获取提取latest news from Yahoo tennis的实例 .
你可能已经拥有了很多,但我认为这是你想要做的:
我使用SgmlReader在.NET中得到了不同的结果,最初由Chris Lovett启动,并且似乎已由MindTouch更新 .
我喜欢Google Spreadsheets的ImportXML(URL,XPath)功能 .
如果您的XPath表达式返回多个值,它将在列中重复单元格 .
一个电子表格中最多可以包含50个
importxml()
函数 .RapidMiner的Web插件也很容易使用 . 它可以做帖子,接受cookie,并可以设置user-agent .
我使用Aptana的Jaxer jQuery解析页面也取得了很大的成功 . 它本质上不是那么快或“类似脚本”,但jQuery选择器真正的JavaScript / DOM是更复杂(或格式错误)页面的救星 .