首页 / 知识

关于语言不可知:最好的库来进行网络抓取

2023-04-15 14:41:00

关于语言不可知:最好的库来进行网络抓取

best library to do web-scraping

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


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

一个非常强大的库,使刮刮成为一件轻而易举的事。


HTML Agility Pack For .net程序员很棒。它可以转换XML文档中的网页,可以使用XPath进行查询。

1
2
3
4
5
6
7
8
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提供了一个很好的清洁解决方案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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/


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

基本上,您需要解析HTML,但更重要的是自动化浏览器。这就是能够移动鼠标和点击,基本上真的模仿用户。你需要使用一个screencapture程序来访问验证码并将它们发送到decaptcha.com(解决它们只需几分钱)来规避它。忘记通过解析html来保存那个验证码文件,而不是在浏览器中呈现它,因为它应该被看到'。你是屏幕抓取,而不是httprequestscraping。

watir为我提供了与autoitx相结合的技巧(用于移动鼠标并在字段中输入键 - >有时这是设置正确的javascript事件的必要条件)和用于验证码的简单屏幕捕获实用程序。通过这种方式,您将获得最大的成功,编写一个出色的html解析器,发现该网站的所有者已将部分文本转换为图形,这是无用的。 (有问题?不,只需获取一个OCR库并提供jpeg,将返回文本)。除了我很少看到它们走得那么远,虽然在中国网站上,图形中有很多文字。

Xpath一直保存我的一天,这是一个很棒的领域特定语言(恕我直言,我可能是错的)你可以访问页面中的任何标签,虽然有时你需要调整它。

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

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

假装是Useragents的图书馆也是无用的,现在网站被保护免受抓取,并且在真实屏幕上呈现网站通常需要超越验证码,还需要触发信息显示等的javascript事件。 。

Watir如果你是Ruby,Selenium,其余的我会说。"人类模拟器"(或俄罗斯的网络模拟器)真的是为了这种刮擦而制造的,但是它再一次是来自一家毫不掩饰其意图的公司的俄罗斯产品。

我也认为Wiley这几周有一本关于刮擦的新书,应该很有趣。祝好运...


我个人喜欢WWW :: Mechanize Perl模块来完成这些任务。它为您提供了一个以典型Web浏览器为模型的对象(即您可以通过调用方法来跟踪链接,填写表单或使用"后退按钮")。

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


我个人发现http://github.com/shuber/curl/tree/master和http://simplehtmldom.sourceforge.net/非常好用于我的PHP spidering / scraping项目。


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


我会使用LWP(Libl 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 WWW :: Mechanize库非常适合与网站交互以获取您需要的实际页面。


有人说。

使用任何语言。

只要你有一个很好的解析器库和http库,你就可以了。

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


我推荐BeautifulSoup。它并不是最快的,但在大多数解析器所扼杀的(X)HTML页面的不良性方面表现得非常好。


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


你想用什么语言?

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


网络语言地址网页

最新内容

相关内容

猜你喜欢