在OCaml网络爬虫中进行HTTP重定向

时间:2011-01-10 00:08:13

标签: html http web-crawler ocaml

我正在做什么

我正在OCaml中编写一个Web爬虫。使用nlucaronistring_of_uri定义的函数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>

我已经编写了一些代码来提取所提取HTML中所有超链接的列表(即<A>之类的所有[LINK]部分)。一切正常。

问题

问题是某些页面会重定向您,我不知道如何遵循重定向。例如,我的程序将在页面previous answer中输出0个标签,因为维基百科实际上会将您重定向到http://en.wikipedia.org。如果我把这最后一页放到我的程序中,一切正常。但是,如果我给出初始值,它只返回0 string_of_uri个标签。

不幸的是,http://en.wikipedia.org/wiki/Main_Page根本没有文档,除了界面中的函数名称。是否有任何人对如何改进上面的Curl.get_redirectcount功能以便遵循任何可能的重定向并输出它所属的最后一页的HTML?

我注意到将函数connection应用于ocurl上的{{1}}会返回0,这不是我期望的,因为页面被重定向到其他页面...

感谢您的帮助!

一切顺利, Surikator。

1 个答案:

答案 0 :(得分:0)

this answer的评论已经回答了这个问题。解决方案是在Curl.set_followlocation connection true之上添加Curl.perform connection