这是我需要做什么?想知道什么平台最适合 - 易于理解且易于编码。我可能不得不外包它,因为这可能远远超出我的技能水平。
一些背景:
我可以通过我的图书馆访问一些信息数据库和网站。访问数据库和网站的方式是首先加载图书馆网页。在对话框中输入我的图书卡号,然后单击“提交”链接。然后打开我想要从中获取数据的服务的经过身份验证的(我假设是通过 cookie 或类似的)网页。
我想要实现的目标:
我想在文件夹中创建适当命名的 Pdf 文件的汇编。或者,最好是创建一个 PDF 文件,其中包含保存的所有页面,这些页面是从一个 PDF 文件中的索引页面超链接的。
这些页面来自多个网站。访问这些网站要么是免费的,要么需要密码或基于库的访问(据我所知,这需要基于屏幕的交互)。
此外,在可以通过基于库的访问方式访问的这些网站之一上,每次我进入不同的页面时,地址栏中的网页地址都不会改变(太糟糕了)。因此,我想要下载以供离线查看的许多页面不适合使用简单的 Wget 类型的命令。据我所知,它需要某种方式来单击网站上的正确选项卡,以便加载页面,并且页面加载后,需要将其打印为具有合适名称的 PDF 文件,并编译为一份 PDF 文件。
想知道使用什么平台来开发这个迷你应用程序/脚本?
有人可以帮助我决定什么平台最适合此类应用程序吗?理想情况下,我希望解决方案是面向函数调用的,这样如果我在开发一个月后必须添加一个网页,我就不必跑向开发人员进行此类“配置”更改。
该平台不一定是 Unix,尽管我认为使用 Unix 平台可以带来最大的灵活性。我可以在我的 Mac、在线主机或我的 Raspberry Pi 上运行它:)
谢谢你!!
更新:
刚刚听一位懂IT的朋友说 http://seleniumhq.org/或者 http://scrapy.org/可能是不错的选择。也会研究它们。
答案1
好吧,在收到 scrapy 的链接后我做了一些研究,并意识到我正在谈论一个网络爬虫。对于其他可能关心的人,这里是我收集的一些信息。
仍然不确定如何前进,但听起来 BeautifulSoup 和 Mechanize 可能是最简单的前进方式。斜纹布由于其简单性也看起来相当不错。有什么想法吗?
我的研究链接的汇编
python 网页抓取工具概述的演示 http://www.slideshare.net/maikroeder/overview-of-python-web-scraping-tools
机械化 http://wwwsearch.sourceforge.net/mechanize/
美丽汤:我们叫他乌龟,因为他教我们。 http://www.crummy.com/software/BeautifulSoup/
twill:一种用于网页浏览的简单脚本语言 http://twill.idyll.org/
Selenium - Web 浏览器自动化 http://seleniumhq.org/
PhantomJS:带有 JavaScript API 的 Headless WebKit http://phantomjs.org/
机械化是我的最爱;强大的高级浏览功能(超级简单的表单填写和提交)。
Twill 是一种构建在 Mechanize 之上的简单脚本语言
BeautifulSoup + urllib2 也工作得很好。
Scrapy 看起来是一个非常有前途的项目;这是新的。
有人知道我可以使用一个基于 Python 的网络爬虫吗? - 堆栈溢出 https://stackoverflow.com/questions/419235/anyone-know-of-a-good-python-based-web-crawler-that-i-could-use
PycURL 主页 http://pycurl.sourceforge.net/
Scrapy 评估 - BeautifulSoup + Mechanize 使用 Evenlet 来获得并发性似乎可能更简单(我的评论来自这里)
python - Scrapy值得学习吗? - 堆栈溢出 https://stackoverflow.com/questions/6283271/is-it-worth-learning-scrapy
提炼、重用和请求数据 |刮刀维基 https://scraperwiki.com/
答案2
我一直用轻量级水压(libwww-perl) 或网址:机械化对于这样的工作 - 有几种编程任务我会使用 python 来完成,但我更喜欢使用 perl 来完成涉及文本处理的任何事情。
我写的最复杂的一篇可能是几年前,当时我和我的伙伴拥有一家小书店 - 她需要一个程序从图书经销商的网站中提取有关书籍的信息(输入 ISBN 或条形码)并将相关详细信息插入到她中( postgresql) 股票数据库。
请注意,编写网络爬虫可能是乏味且耗时的 - 您花费大量时间阅读各种网页的 HTML 源代码并弄清楚如何识别和提取您正在寻找的信息。
这并不是特别困难,但确实需要良好的 HTML 知识和至少中级编程技能。
您可能必须为每个数据库站点编写一个不同的抓取工具,而不是一个完成所有这些操作的抓取工具 - 尽管您可以编写一个包装器脚本,将它们作为函数包含或根据站点调用单独的脚本。
网站也会发生变化。一个已经运行良好六到十二个月的抓取工具可能会突然停止工作,因为该网站已被重新设计并且它不再按照脚本预期的方式工作。
因此,如果任何数据库具有某种用于编程访问的 API(例如使用休息或者肥皂甚至RSS)然后使用它而不是抓取 HTML。不幸的是,对于通过图书馆提供的数据库类型来说,这是不太可能的(数据库所有者往往对数据持前网络态度,并且对控制和限制访问比其他任何事情都更感兴趣)。他们不希望任何人能够轻松地通过程序而不是浏览器访问他们的数据,并且有些人花大力气混淆他们的网站,使 HTML 代码难以理解,或者需要 JavaScript 解释器来提取链接和其他数据。
一个很好的例子就是电视列表网站——其中一些网站确实不希望人们使用他们的数据来自动安排 MythTV 等节目的录制时间表,因此网站开发人员和网站抓取者之间存在着一场持续不断的技术战争作者。
Perl 有 javascript 解释器(包括一个与 WWW::Mechanize 一起使用的解释器,称为WWW::脚本编写者,但有时自己检查网站的 javascript 代码,弄清楚它在混淆 HTML 中做了什么,然后编写 perl 代码来对数据进行反混淆,而不需要 js 解释器,会更容易。