我正在做什么
我正在使用OCaml编写网络爬虫。利用下面定义的string_of_uri
函数(由nlucaroni在我之前的一个问题的答案中定义),可以从Web上获取URL的HTML文本。
let string_of_uri uri =
try let connection = Curl.init () and write_buff = Buffer.create 1763 in
Curl.set_writefunction connection
(fun x -> Buffer.add_string write_buff x; String.length x);
Curl.set_url connection uri;
Curl.perform connection;
Curl.global_cleanup ();
Buffer.contents write_buff;
with _ -> raise (IO_ERROR uri)
我已经编写了一些代码,用于提取获取的HTML中所有超链接的列表(即任何类似
<A HREF="[LINK]">text</A>
的部分)。这一切都很好地运作。问题在于有些页面会重定向你,我不知道如何跟随重定向。例如,我的程序将在页面http://en.wikipedia.org中输出0个标签,因为维基百科实际上会将您重定向到http://en.wikipedia.org/wiki/Main_Page。如果我将最后一个页面提供给我的程序,它就可以正常工作。但是如果我提供初始页面,它只会返回0个
<A>
标签。不幸的是,ocurl没有任何文档,除了接口中函数的名称外。有人有什么想法吗,我该如何改进上面的
string_of_uri
函数,使其跟随任何可能的重定向并输出它最后落入的页面的HTML?我注意到,在http://en.wikipedia.org上对连接应用
Curl.get_redirectcount
函数会返回0,这不是我期望的结果,因为该页面被重定向到其他页面...感谢任何帮助!
最好的祝愿, Surikator。