不幸的是,我大学的网站没有提供供稿,但他们一直在那里发布对我来说很重要的信息(截止日期,考试日期等)作为pdf的链接 在网站的某个部分。
我如何定期抓取网站的该部分并通知我(咆哮,发邮件等)。
通常我会使用wget来镜像它,但是如何只提取网站的部分内容? 是否有可以通过XPATH或类似方法提取XHTML的cli工具?
答案 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函数,因此如果一个简单的选择器不能解决这个问题,那么对于更复杂的抓取有很大的灵活性。