Re:Ferret – Declarative web scraping
by bryanrasmussen on Tuesday October 02, 2018 @01:25PM
(#18123720)
I'm not actually seeing much code controlling the flow of the program.
[ Parent
| on HN ]
Re:Ferret – Declarative web scraping
by tlrobinson on Tuesday October 02, 2018 @03:00PM
(#18124624)
I mean, I can remove control flow constructs from an imperative language and call it declarative, but that wouldn't be very useful.
What is the advantage of it being declarative? At least for the example, the equivalent imperative code is about the same length.
Re:Ferret – Declarative web scraping
by bryanrasmussen on Tuesday October 02, 2018 @03:09PM
(#18124722)
I don't think there is much advantage in being declarative in this case because whenever I need to scrape stuff I have to do a lot of edge case handling and I want to be in control, but it does seem to be a recurring dream to make some sort of web query language (based on my memories of Old Dr. Dobbs issues)
The flow in the example is simple: click -> wait -> process result; but it's still there. Notice that instructions are executed in the order they are defined, that is enough to make it imperative.
Re:Ferret – Declarative web scraping
by bryanrasmussen on Tuesday October 02, 2018 @02:51PM
(#18124536)
yes but I think it could be made truly declarative with very little work.
take out the waits, and maybe not carry around the doc all over the place - the context of the page being processed should be figured out by the interpreter.
on edit: although the web interfaces being what they are some things need to be order dependent - like INPUT(google, 'input[name="q"]', "ferret") CLICK(google, 'input[name="btnK"]'), I mean you need to click the button after you fill out the input.