最好的网络抓取图书馆
我想从不同的网页中获取数据,例如餐厅的地址或者给定位置的不同事件的日期等等。从给定的网站集中提取数据的最佳库是什么?
解决方案
回答
我们想使用哪种语言?
用awk卷曲可能就是我们所需要的。
回答
我们可以使用tidy将其转换为XHTML,然后使用我们选择的语言提供的任何XML处理工具。
回答
Perl WWW :: Mechanize库非常适合与网站交互以获取所需的实际页面的驴工作。
回答
我会推荐BeautifulSoup。它不是最快的,但是在大多数解析器无法正常运行的(X)HTML页面方面表现不佳。
回答
我将使用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将为我们提供基础的搜寻器。
回答
我认为这里的一般答案是使用任何语言+ 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/
回答
用于.net程序员的HTML Agility Pack非常棒。它将打开可以使用XPath查询的XML文档中的网页。
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
回答
我个人喜欢WWW :: Mechanize Perl模块来完成这些任务。它为我们提供了一个根据典型的Web浏览器建模的对象(即,我们可以跟踪链接,填写表单或者通过在其上调用方法来使用"后退按钮")。
为了提取实际内容,我们可以将其连接到HTML :: TreeBuilder以将我们当前访问的网站转换为HTML :: Element对象树,并提取所需的数据(`look_down() HTML :: Element的方法特别有用)。
回答
如果使用python,请仔细阅读Beautiful Soup(http://crummy.com/software/BeautifulSoup)。
一个功能强大的库,使抓取工作变得轻而易举。
回答
推荐Perl Mechanize的答案很多,但我认为Ruby Mechanize(非常类似于Perl的版本)更好。它在语法上以更简洁的方式处理诸如表单之类的事情。另外,在Ruby Mechanize之上运行着一些前端,这使事情变得更加容易。
回答
我个人发现http://github.com/shuber/curl/tree/master和http://simplehtmldom.sourceforge.net/非常适合在我的PHP爬虫/抓取项目中使用。
回答
有人说了什么
使用任何语言。
只要我们具有良好的解析器库和http库,就可以设置好。
树的东西比较慢,然后只使用一个好的解析库。