我正在OCaml中编写一个Web爬虫。使用nlucaroni中string_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。
答案 0 :(得分:0)
this answer的评论已经回答了这个问题。解决方案是在Curl.set_followlocation connection true
之上添加Curl.perform connection
。