刮掉网站的一部分并通知变更

时间:2012-01-10 22:26:40

标签: scripting automation web-scraping

不幸的是,我大学的网站没有提供供稿,但他们一直在那里发布对我来说很重要的信息(截止日期,考试日期等)作为pdf的链接 在网站的某个部分。

我如何定期抓取网站的该部分并通知我(咆哮,发邮件等)。

通常我会使用wget来镜像它,但是如何只提取网站的部分内容? 是否有可以通过XPATH或类似方法提取XHTML的cli工具?

3 个答案:

答案 0 :(得分:3)

试试这个:

wget --spider --server-response http://example.com

这将打印可能包含“Length”属性的标题。如果有变化,您可以通知自己。

编辑:如果更改,您可以下载整个html文件,grep以获取pdf文件或任何您想要查找的内容(可能是“< div id ='news'> (。*?)< / DIV>“中)

答案 1 :(得分:1)

嗯......你应该看看QueryPath。 QueryPath可以轻松解析HTML。如果HTML结构发生变化怎么办?如果您想要页面的特定元素怎么办? QueryPath为您完成了艰苦的工作。你喜欢JQuery吗? QueryPath就像PHP的JQuery。

请参阅:http://www.ibm.com/developerworks/opensource/library/os-php-querypath/index.html?S_TACT=105AGX01&S_CMP=HP 请参阅:http://querypath.org/

答案 2 :(得分:0)

您可能有兴趣查看Pjscrape(免责声明:这是我的项目)。它是一个基于PhantomJS的网络抓取工具,在无头Webkit浏览器环境中为您提供对页面的完整jQuery访问。通过命令行从网页中提取半结构化数据非常容易,特别是如果您正在抓取的页面具有一致的新元素结构。

例如,您可以使用以下代码从this course catalog提取所有课程标题:

pjs.addScraper(
    // the page you're scraping
    'http://www.ischool.berkeley.edu/courses/catalog', 
    // selector for elements you want to pull text from
    '.views-row .views-field-title'
);

// suppress STDOUT logging
pjs.config('log', 'none');

默认情况下,从命令行运行此命令会为您提供JSON到STDOUT:

~> phantomjs /path/to/pjscrape.js my_script.js
["W10. Introduction to Information","24. Freshman Seminar", ...]

因此,定期运行此脚本,捕获文件中的输出,然后在新输出与先前的刮擦不匹配时提醒您将非常简单。你也可以编写自己的scraper函数,因此如果一个简单的选择器不能解决这个问题,那么对于更复杂的抓取有很大的灵活性。