Skip to main content

AvoidTraps

Struct AvoidTraps 

Source
pub struct AvoidTraps<F> { /* private fields */ }
Expand description

A facade that bounds expanding URL branches, see FrontierExt::avoid_traps.

When a budget is exceeded, the whole origin/path prefix is blocked for this facade’s lifetime. Seeds already queued there are skipped on pop and reported inwards as Report::Skipped. In-flight work can finish. Other prefixes and origins continue. Refusals are logged and counted by refused, separately from crawler request totals.

This does not inspect page content, execute CSS, or replace robots.txt and deduplication. Keep this facade outside retry/revisit facades so it also checks the seeds they hand out. Snapshots contain pending seeds, not the heuristic state; persistent storage keeps blocked seeds until they are popped and skipped.

Implementations§

Source§

impl<F> AvoidTraps<F>

Source

pub fn new(inner: F, policy: TrapPolicy) -> Self

Wraps inner with the URL budgets in policy.

Source

pub fn refused(&self) -> usize

Returns the number of refused pushes and skipped queued seeds.

Trait Implementations§

Source§

impl<F: Debug> Debug for AvoidTraps<F>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<F: Frontier> Frontier for AvoidTraps<F>

Source§

async fn push(&self, seed: Seed) -> Result<Admission>

Offers a seed, which the frontier may refuse. Read more
Source§

async fn pop(&self) -> Result<NextSeed>

Takes the next seed that is ready to be crawled. Read more
Source§

fn report(&self, report: Report) -> impl Future<Output = Result<Ack>> + Send

Tells the frontier how a popped seed ended. Read more
Source§

fn size_hint(&self) -> Option<usize>

Returns the number of queued seeds, if known.
Source§

fn snapshot(&self) -> Option<Vec<Seed>>

Returns a copy of every seed held, in no particular order, to save the crawl and resume it later; None if the frontier cannot, e.g. because it persists seeds itself. Read more

Auto Trait Implementations§

§

impl<F> !Freeze for AvoidTraps<F>

§

impl<F> RefUnwindSafe for AvoidTraps<F>
where F: RefUnwindSafe,

§

impl<F> Send for AvoidTraps<F>
where F: Send,

§

impl<F> Sync for AvoidTraps<F>
where F: Sync,

§

impl<F> Unpin for AvoidTraps<F>
where F: Unpin,

§

impl<F> UnsafeUnpin for AvoidTraps<F>
where F: UnsafeUnpin,

§

impl<F> UnwindSafe for AvoidTraps<F>
where F: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<F> FrontierExt for F
where F: Frontier,

Source§

fn dedup(self) -> Dedup<Self>

Refuses seeds seen before, remembering them in memory.
Source§

fn dedup_with<S: SeenSet>(self, seen: S) -> Dedup<Self, S>

Refuses seeds seen before, remembering them in seen.
Source§

fn filter<P>(self, predicate: P) -> Filter<Self, P>
where P: Fn(&Seed) -> bool + Send + Sync + 'static,

Refuses seeds predicate rejects.
Source§

fn allow_hosts<I>( self, hosts: I, ) -> Filter<Self, impl Fn(&Seed) -> bool + Send + Sync + 'static>
where I: IntoIterator<Item: AsRef<str>>,

Refuses seeds outside hosts and their subdomains, e.g. to keep a crawl from following links off-site.
Source§

fn max_depth(self, depth: u32) -> MaxDepth<Self>

Refuses seeds deeper than depth.
Source§

fn avoid_traps(self) -> AvoidTraps<Self>

Bounds expanding URL prefixes with conservative, configurable heuristics. Opt in alongside robots.txt and deduplication; legitimate large archives or opaque identifiers may need higher budgets. Read more
Source§

fn avoid_traps_with(self, policy: TrapPolicy) -> AvoidTraps<Self>

Bounds expanding URL prefixes using policy, see Self::avoid_traps.
Source§

fn retry(self, max_retries: u32) -> Retry<Self>

Retries failed seeds up to max_retries times with exponential backoff.
Source§

fn retry_with(self, policy: RetryPolicy) -> Retry<Self>

Retries failed seeds according to policy.
Source§

fn tag_backoff(self) -> TagBackoff<Self>

Holds back seeds of paused tags.
Source§

fn revisit<T: Revisit>(self) -> Revisits<Self, T>
where Self: Schedule,

Crawls pages again on a schedule: a seed reported done or failed is crawled again after its tag’s Revisit::interval, so the crawl keeps going, waiting for the next revisit once nothing else is queued. Read more
Source§

fn score<S: Score>(self, scorer: S) -> Scored<Self, S>

Adds scorer’s score to the priority of every seed pushed, so a frontier that orders by priority crawls the best seeds first. Read more
Source§

fn layer<L: FrontierLayer<Self>>(self, layer: L) -> L::Frontier

Wraps the frontier with a custom facade.
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<W> WorkerExt for W

Source§

fn layer<C, M>(self, middleware: M) -> Layered<M, C>
where C: Send + 'static, Self: Worker<C>, M: Middleware<C>,

Wraps this worker in middleware, which runs before it, and before any middleware added earlier.