How to stop your scraper breaking when a site redesigns its HTML
CSS selectors and XPath are a bet that markup never changes. Ask for the price, not div.grid__x9 > span.ttl.
A selector like div.grid__x9 > h4.ttl describes an accident of this week's markup. Class names minify, A/B tests swap layouts, frameworks re-render the same content into a new DOM. The data — a name, a price, a rating — usually did not move.
Plainscrape does not take CSS or XPath. You describe the fields in plain language. Extraction is anchored to meaning. When a field is not on the page, it comes back empty, not a confident hallucination.
There is no public “saved selector” API to invalidate. Each call carries the instruction. Conversational refine of a stored result is on the roadmap; until it ships, a follow-up is a new request, billed as a new fetch.
Longer engineering notes: Why Plainscrape?
FAQ
Plainscrape takes a plain-language instruction. There are no selectors or XPath to write or maintain. When a site redesigns its markup, the meaning of the page is what you asked for — not a class name.
Stop treating CSS/XPath as the contract. Ask for the product price, the title, the rating. Plainscrape extracts what the page says, not where the page says it.
No. Describe the data. If a field is not on the page, it comes back empty — not a plausible guess.
No public selector-cache API. You send the question on each call. Conversational refine of a saved result is on the roadmap; until it ships, a follow-up is a new request.