diff --git a/CHANGELOG.md b/CHANGELOG.md index f9dcb8e..e21c7ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,38 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.3.1] - 2026-08-17 + +Feed spiders, ported from upstream Scrapling v0.4.13. + +### Added + +- **`XmlFeedSpider`**: iterate the nodes of RSS/Atom/product feeds. + Elements matching `iter_tag` (default `"item"`; use `"entry"` for + Atom) become items — by default an object mapping child element names + to their text, or whatever a custom `parse_node` callback returns. + HTML-void feed tags (``, ``) are rewritten before parsing + so their text survives html5ever; self-closing forms are expanded so + siblings are never swallowed. See the module docs for limitations + (XML namespaces, CDATA). +- **`CsvFeedSpider`**: iterate CSV feed rows as header→cell objects. + RFC 4180 parsing (quoted fields, `""` escapes, embedded + delimiters/newlines, LF/CRLF), configurable delimiter, optional + `headers` override and `parse_row` callback. +- **Transparent gzip bodies**: responses whose body carries the gzip + magic bytes (e.g. raw `.xml.gz` / `.csv.gz` feed and sitemap files + served without `Content-Encoding: gzip`) are decompressed before + charset decoding. Decompression is capped at the fetcher's configured + body-size limit, so a decompression bomb cannot bypass it; oversized + or corrupt gzip data falls back to the raw bytes (the previous + behavior). Concatenated multi-member gzip streams (pigz/bgzip) are + fully read. This also makes `SitemapSpider` handle `sitemap.xml.gz`. + +### Notes + +- Upstream v0.4.14 was evaluated: it is a Python-packaging-only fix and + does not apply to this crate. + ## [0.3.0] - 2026-08-12 Typed errors throughout the fetch path — the one long-planned breaking @@ -211,6 +243,7 @@ upstream Scrapling v0.4.8 through v0.4.11. - **CLI**: `fetch` and `extract` subcommands with CSS selector and format options - **175 tests** covering all modules +[0.3.1]: https://github.com/Liohtml/RUSTScrapling/releases/tag/v0.3.1 [0.3.0]: https://github.com/Liohtml/RUSTScrapling/releases/tag/v0.3.0 [0.2.3]: https://github.com/Liohtml/RUSTScrapling/releases/tag/v0.2.3 [0.2.2]: https://github.com/Liohtml/RUSTScrapling/releases/tag/v0.2.2 diff --git a/Cargo.lock b/Cargo.lock index 8eb7efd..6f34682 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1702,7 +1702,7 @@ dependencies = [ [[package]] name = "rust_scrapling" -version = "0.3.0" +version = "0.3.1" dependencies = [ "async-trait", "clap", diff --git a/Cargo.toml b/Cargo.toml index 53d273d..4388cd9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rust_scrapling" -version = "0.3.0" +version = "0.3.1" edition = "2021" description = "A Rust port of Scrapling - modern web scraping framework with CSS selectors, async HTTP, and spider-based crawling" authors = ["Liohtml"]