Just an addition to show the $bfind loop I have in mind. Dumping all the data first, like:
on *:sockread:imdb: {
:read
sockread -fn &imdbtemp
if ($sockbr) {
bwrite temp.txt -1 -1 &imdbtemp
goto read
}
}
Now parsing that data in the sockclose event:
on *:sockclose:imdb:{
if ($isfile(temp.txt)) {
; read whole page into binvar
bread temp.txt 0 $file(temp.txt).size &imdb
; ECHO -a binvar has $bvar(&imdb,0) bytes
; relevant line starts with: [SPACE]<p><b>
; set pointer at the start of the relevant line. set end of that line
var %pos = $bfind(&imdb,1,$chr(32) $+ <p><b>).text, %end = $bfind(&imdb,%pos,0)
; ECHO -a linestart +300: $bvar(&imdb,%pos,300).text
; ECHO -a lineend -300: $bvar(&imdb,$calc(%end -300),300).text
; set indicating "start text" for all the chunks-to-get: onclick="(new Image()).src='/rg/find-title-
var %find = onclick="(new Image()).src='/rg/find-title-
; set regex for matching and capturing
var %reg = /\/find-title-\d+\/title_(\w+)\/images\/b\.gif\?link=\/title\/tt(\d+)\/';">(.+)<\/a>/
; this reg is just an alternative to include "aka, year" etc.
var %reg2 = /\/find-title-\d+\/title_(\w+)\/images\/b\.gif\?link=\/title\/tt(\d+)\/';">(.+)/
; loop all occurrences of %find, up to the end of the relevant line
while ((%pos < %end) && ($bfind(&imdb,%pos,%find).text)) {
; set pointer to the "end marker of this chunk": </td>
var %pos = $bfind(&imdb,$v1,</td>).text
; current chunk
var %chunk = $bvar(&imdb,$v1,$calc(%pos - $v1)).text
; ECHO -a current chunk: %chunk
if ($regex(%chunk,%reg)) { ECHO -a Type: $regml(1) Nr: $regml(2) Text: $regml(3) }
; else ECHO -a skipped a chunk
}
; remove tempfile
.remove temp.txt
}
}
...Lacks error handling etc

You have all the matches with $regml(1) = "type" (exact/popular/substring/aprox), $regml(2) = "ttNr." and $regml(3) = "Title".
Note that if there's only one exact match, imdb will forward to that title. You can capture this ttNr. in the sockread event:
/^Set-Cookie: fd=tt(\d+)\// where $regml(1) is the ttNr. And if there's no match at all, you'll have a "<b>No Matches.</b>" somewhere in the sockread.
In the code above, the "find line's start and end" stuff is what I'd like to avoid - yet I don't manage to put only that single, lengthy line directly into a binvar/bwrite it (for an early sockclose and less data to parse).
The biggest downside regarding performance is /bwriting the
complete sockread into a tempfile fist. Will throwing "the line" out into a separate binvar speed it up (?) I doubt...