<div dir="ltr">I don't know the specifics of your task, but I have been working on a sort of soup to nuts web crawling system. The system itself allows for pretty concise specification of most types of web crawling that I've encountered, and depending on what you need it contains a functional http-browser that manages cookies etc, and that in turn contains a reimplementation of a chunk of net/ that can parse and generate client side cookies. It should be install-able as a racket package. <br>
<br><a href="https://github.com/emdonahu/boris">https://github.com/emdonahu/boris</a><br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Jan 8, 2014 at 9:33 AM, Matthew Flatt <span dir="ltr"><<a href="mailto:mflatt@cs.utah.edu" target="_blank">mflatt@cs.utah.edu</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">In case no one offers a better library, enclosed is a small one that I<br>
recently created for a web-scraping task.<br>
<br>
Start a simulation of a browser with `make-connection`, use `goto!` to<br>
follow a link to a relative URL (following redirects), and use `back!`<br>
to go back. The `goto!` function returns two values: the headers as a<br>
string and the page content as bytes.<br>
<br>
Beware: My application accessed a single site, so this library doesn't<br>
attempt to do the right thing with cookies across sites.<br>
<div class="HOEnZb"><div class="h5"><br>
At Wed, 08 Jan 2014 03:48:44 -0800, Duncan Bayne wrote:<br>
> Hi All,<br>
><br>
> I'm trying to re-write some Common Lisp web-scraping code in Racket.<br>
><br>
> In Common Lisp, I'm POSTing a login request, and storing the cookie-jar<br>
> for subsequent GETs:<br>
><br>
> (defun login (username password)<br>
>   "Logs in to <a href="http://www.example.com" target="_blank">www.example.com</a>.  Returns a cookie-jar containing<br>
>   authentication details."<br>
>   (let ((cookie-jar (make-instance 'drakma:cookie-jar)))<br>
>     (drakma:http-request "<a href="http://www.example.com/login" target="_blank">http://www.example.com/login</a>"<br>
>              :method :post<br>
>              :parameters `(("username" . ,username) ("password" .<br>
>              ,password))<br>
>              :cookie-jar cookie-jar)<br>
>     cookie-jar))<br>
><br>
> ; snip<br>
><br>
> (defun get-page (page-num cookie-jar)<br>
>   "Downloads a potentially invalid HTML page containing data to scrape.<br>
>   Returns a string containing the HTML."<br>
>   (let ((url (concatenate 'string "<a href="http://www.example.com/data/" target="_blank">http://www.example.com/data/</a>"<br>
>   (write-to-string page-num))))<br>
>     (let ((body (drakma:http-request url :cookie-jar cookie-jar)))<br>
>       (if (search "No data found." body)<br>
>     nil<br>
>   body))))<br>
><br>
> However, I can't find an equivalent in Racket. The latest HTTP<br>
> library[1] makes no mention of cookies at all, and AFAICT the cookie<br>
> library[2] seems more about correctly serializing and deserializing<br>
> them.<br>
><br>
> Can anyone suggest a way of re-writing the above CL in Racket without<br>
> having to implement a bunch of header-parsing stuff?<br>
><br>
> TIA for any help ...<br>
><br>
> [1]<br>
> <a href="https://github.com/plt/racket/blob/master/racket/collects/net/http-client.rkt" target="_blank">https://github.com/plt/racket/blob/master/racket/collects/net/http-client.rkt</a><br>
> [2] <a href="http://docs.racket-lang.org/net/cookie.html" target="_blank">http://docs.racket-lang.org/net/cookie.html</a><br>
><br>
> --<br>
> Duncan Bayne<br>
> ph: <a href="tel:%2B61%20420817082" value="+61420817082">+61 420817082</a> | web: <a href="http://duncan-bayne.github.com/" target="_blank">http://duncan-bayne.github.com/</a> | skype:<br>
> duncan_bayne<br>
><br>
> I usually check my mail every 24 - 48 hours.  If there's something<br>
> urgent going on, please send me an SMS or call me.<br>
> ____________________<br>
>   Racket Users list:<br>
>   <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a></div></div><br>____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
<br></blockquote></div><br></div>