我需要构建一个内容收集程序,只需读取指定网页上的数字,然后保存该数据以供日后分析。我不需要它来搜索链接或相关数据,只需从每天都有不断变化的内容的网站收集所有数据。
我的编程经验很少,我希望这对学习有好处。速度不是一个大问题,我估计爬虫最多每天需要加载4000页。
感谢。
编辑:如果我收集数据的网站受到爬虫的保护,有没有办法提前测试?
答案 0 :(得分:9)
Perl有一个非常好的LWP(Library for WWW in Perl),Python有urllib2。
两者都是大多数操作系统都可以使用的简单脚本语言。
我在Perl做了很多次爬虫,这是工作的一个晚上。
不,除了使用排序的CAPTCHA之外,他们无法真正保护自己免受爬虫攻击 - 其他一切都比设置更容易破解。
有一点关于Java:Java很好。它更冗长,需要一些开发环境设置:所以你不会在一个晚上,可能是一周内完成。
对于一个小问题,作者提出的问题,这可能是一种过度杀伤力。
另一方面,有非常有用的库,如lint
,tagsoup
(随机HTML遍历的DOM遍历)和lucene
(全文索引和搜索),因此您可能需要Java更严肃的项目。
在这种情况下,我建议使用Apache commons-httpclient
库进行网页抓取(如果你疯了,可以推荐nutch
。)。
此外:有些货架产品可以监控指定网站的变化,并以有用的方式呈现它们,因此您可能只需抓住一个。
答案 1 :(得分:7)
您最熟悉的语言不仅仅是最好的语言。
我的节目很少 经验
您可能会发现网络抓取工具有点受洗,您需要构建一些其他更简单的应用程序来熟悉您选择的语言(如果适用,还需要框架)。
祝你好运!答案 2 :(得分:3)
我确实创建过一次webcrawler,但它的创建是为了搜索网站以获取更多指向其他网站的链接并按照这些链接进行操作。它必须记住这些链接,并确保我不会访问网站两次,因此我需要一种非常快速的方法来检查重复的URL。为此,我在Delphi 2007中创建了自己的哈希表。通过一些关于如何使用Internet Explorer COM界面的额外知识,我设法在很短的时间内阅读了很多页面。 我使用Delphi来编写这个爬虫,因为我想要很多性能。
然后,我再次选择了Delphi,因为它是我最熟悉的语言,而且它帮助我学习了很多有趣的主题,包括如何编写自己的哈希表算法。此外,对于像我这样经验丰富的程序员来说,这是一个非常有趣的挑战。
我已经提供了建议:使用您最熟悉的工具。
答案 3 :(得分:2)
有没有办法提前测试 如果是我的网站 收集数据受到保护 爬虫?
除了CAPTCHA之外,尊重robots.txt文件的内容(如果存在)是一种很好的礼节。
答案 4 :(得分:1)
Perl或python是明显的选择,它取决于最终真正适合你的东西。也不是那么困难,但总的来说,如果你发现你更喜欢流动的语言语言,真正灵活的perl会更适合你,就好像你发现你更喜欢更具有数学思维的更严格的语言(特别是相信只有一种方法可以做正确的事情)然后你可能会感觉更多在家里蟒蛇。其他语言可以很好地完成这项工作,但由于便携性和CLI脚本任务的强大语言,特别是文本操作,以及强大的webdev语言导致大量有用的模块可用于面向Web的任务,这两种语言是明显的选择(给出了php提到的好处,但没有客户端的PHP的负面影响)。如果有大量有用的模块可供您使用,那么perl对于这种任务比其他任何语言(在CPAN上)都要大得多,可能值得检查一下,如果有代码可以重新使用,那么在服用之前深入了解使用哪种语言。在某些领域,一个比另一个快(python通常在复杂的数学方面表现优异,perl通常可以更快地处理文本,取决于你如何做到这一点)。
其他语言选择在那里,编译语言的可移植性较差,因此通常更难以在服务器上设置它,但执行速度更快。脚本语言通常设计为比编译语言更容易操作文本和文件,但并非总是如此。我对perl感觉更舒服,所以我会使用它,但是我说这不是你应该做出决定的依据,找出哪些资源可以使用,哪种更喜欢你感觉更好(看一些代码看哪种风格对你更有意义)然后决定。
哦,orielly有一本关于编程集体智慧的书,针对这个主题的初学者,我从来没有读过它,但它应该是非常好的,在商店中浏览它,并考虑它主要是关于网络 - 爬虫算法......它使用python作为例子。
答案 5 :(得分:1)
如果您是初学者,我建议使用“简单”语言,例如REBOL。在REBOL中,检查一堆维基百科页面进行修改的基本脚本看起来像下面的代码。显然,“简单”是主观的,您仍然需要对此代码进行一些基本更改以满足您的要求。
记录:加载%records.txt
; (records.txt文件的内容看起来像这样 - 缩进并不重要)
[
[en.wikipedia.org/wiki/Budget_deficit
“美国预算赤字(维基百科)”
{< li id =“lastmod”>此页面最后一次修改}
“2009年6月1日11:26。”]
[en.wikipedia.org/wiki/List_of_U.S._states_by_unemployment_rate
“美国失业率(维基百科)”
{< li id =“lastmod”>此页面最后一次修改}
“2009年5月25日20:15。”]
]
;现在循环记录并检查Web是否有变化
foreach rec记录[
html:read rec / 1;在这里为404s或超时添加错误chking
parse / all html [any [thru rec / 3 copy curr-mod-date to< / li>]]
除非rec / 4 = curr-mod-date [
print [“CHANGE DETECTED:”rec / 2]
;再次解析以收集和保存特定的页面数据
;使用更新的时间戳更新%records.txt文件
]
]
REBOL并不为人所熟知,但它很友好,非常小,跨平台且支持GUI。对于快速而肮脏的脚本,我已经取得了很大的成功。
答案 6 :(得分:-3)
我会说PHP。它是一种面向Web的语言,意味着许多库函数可以完成您在这样的项目中需要做的所有奇怪的事情。它有一个很好的lib内置(CURL),它是一种简单的死语言。如果继续编程,你会相对快地增长它,但对于像这样简单的东西,它是一个不错的选择。