PyScrappy gir skraperne selvhelbredende selektorer som overlever redesign
Oppgrader til PyScrappy 1.5.4 hvis du kjører Python-skrapere i produksjon, for selektorene finner nå elementet igjen når nettstedet bytter markup.
Fem utgivelser på fem dager, fra 1.5.0 til 1.5.4 mellom 10. og 14. august, ligger bak den nye oppførselen i PyScrappy. Changeloggen i GitHub-repoet til mldsveda plasserer hovedfunksjonen i 1.5.1: Selector.css har fått auto_save=True, som lagrer et fingeravtrykk av elementet du traff, og adaptive=True, som leter elementet opp igjen ved likhet neste gang selektoren ikke treffer noe.
Gjenfinningen er ikke ren tekstmatching. Fingeravtrykket vekter signalene ulikt, slik at en stabil id eller en data-*-attributt teller mer enn svakere holdepunkter, og det lagres relativt til nærmeste stabile forelder pluss dybde. Innhold som varierer av natur, altså priser, datoer og tellere, vektes ned. Du får tilbake en konfidensverdi og avstanden ned til nest beste kandidat gjennom SelectorList.adaptive_confidence, og fingeravtrykkene ligger i en JSON-fil delt opp per nettsted.
«remember an element and relocate it by similarity when a site changes its markup, so scrapers don't silently break» — PyScrappys README
Samme dag kom 1.5.0 med tre andre ting: en lenkbar Selector-parser i Scrapy-stil med css(), xpath(), find_all() og find_by_text(), en pyscrappy extract-kommando som skraper en URL rett til fil, og TLS-fingeravtrykk via impersonate="chrome", som ruter forespørselen gjennom curl_cffi for å komme forbi anti-bot-filtre. MCP-serveren er derimot ikke ny. Den har ligget i prosjektet minst siden slutten av juli, og alle de 24 innebygde skraperne som fungerer uten proxy, er eksponert som verktøy for agenter.
Show HN-innlegget 16. august fikk 14 poeng og én eneste kommentar, og den kommentaren peker på et hull ingen har tettet ennå.
«will a long running mcp server with cache_ttl enabled accumulate entries indefinitely until process restart?» — rhythmshahriar, Hacker News
Spørsmålet står ubesvart. Responscachen kom i 1.4.0 og kan settes for MCP-serveren med miljøvariabelen PYSCRAPPY_MCP_CACHE_TTL, men changeloggen nevner verken maksstørrelse eller utkastingsregel. Kjører du serveren som langlevende prosess for en agent, er det du som må passe på minnebruken.
Forutsetningene er lave ellers. Kjernebiblioteket krever Python 3.9, mens MCP-serveren trenger 3.10 eller nyere fordi den bygger på fastmcp. Prosjektet er MIT-lisensiert og har 163 stjerner, så du får kildekoden, men ikke et stort miljø rundt deg når noe brekker.
Hva bør du gjøre?
- Slå på
adaptive=Trueder du allerede har hatt brudd. Kjør skraperen én gang mot en fungerende side medauto_save=Trueførst, slik at fingeravtrykket finnes før nettstedet endrer seg. - Gå helt til 1.5.4 hvis du kjeder selektorer. Den utgivelsen fikset at avledede selektorer som
find_all,find_similarogparentmistet forelderens URL og adaptive lager, slik at helbredingen ikke virket gjennom en kjede. - Logg
adaptive_confidencei stedet for å stole blindt på treffet. En selektor som helbreder seg til feil element, feiler stillere enn en som ikke treffer i det hele tatt.
KI-kuratert — innholdet er generert av KI-agenter basert på originalkilden.