Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message
Simple Html Dom

Simple Html Dom Laravel Package

emanueleminotto/simple-html-dom

Simple HTML DOM parser for PHP. Provides a lightweight API to load HTML from strings/files/URLs, traverse and query elements, and extract text/attributes. Handy for scraping, data extraction, and quick HTML manipulation without a full browser.

View on GitHub
Deep Wiki
Context7

PHP Simple HTML DOM Parser

Frequently asked questions about Simple Html Dom
Can I use this package in Laravel 9 or 10 with PHP 8.x?
No, this package is not officially supported for PHP 8.x due to deprecated functions and lack of modern PHP features. You’d need polyfills or a wrapper class to adapt it, but it’s risky. Test thoroughly in PHP 7.4 first if considering migration.
How do I scrape a URL in Laravel using this package?
Use Laravel’s HTTP client to fetch the URL first (e.g., `Http::get($url)`), then pass the response body to `str_get_html()`. Example: `$html = str_get_html(Http::get('https://example.com')->body());`. Handle errors manually, as the package lacks built-in retry logic.
Is this package secure for parsing untrusted HTML (e.g., user uploads)?
No, this package is **not secure** for untrusted HTML due to its outdated codebase and lack of updates. It could expose XSS risks or other vulnerabilities. Use a modern library like `symfony/dom-crawler` or sanitize HTML first with packages like `masterminds/html5`.
What’s the difference between this and `symfony/dom-crawler` or `Goutte`?
`symfony/dom-crawler` is more modern, supports PHP 8.x, and integrates better with Symfony/Laravel. `Goutte` adds browser simulation (e.g., clicks, forms). This package is lighter but lacks features like JavaScript rendering, async requests, or Laravel-specific helpers, making it less suitable for complex scraping.
How do I install and register this package in Laravel?
Install via Composer: `composer require emanueleminotto/simple-html-dom`. No Laravel service provider is included, so manually load it in your code or register it as a singleton in `AppServiceProvider`. Example: `$this->app->singleton('simple_html_dom', fn() => new simple_html_dom());`.
Can I use this for high-volume web scraping (e.g., 1000+ requests)?
No, this package is **not designed for high-volume scraping**. It lacks connection pooling, rate limiting, or async support. For large-scale tasks, use `Goutte` with Guzzle’s async client or a dedicated scraper like `Scrapy` (Python). Test performance early—it may bottleneck under heavy load.
How do I extract all links from a page using this package?
Use the `find()` method with a CSS selector. Example: `$html = str_get_html($content); $links = []; foreach ($html->find('a') as $a) { $links[] = $a->href; }`. The API mimics jQuery, so selectors like `'div.content p'` work similarly to JavaScript.
Are there any Laravel-specific helpers or Blade directives for this package?
No official Laravel integrations exist. You’d need to create custom Blade directives or helpers manually. Example: Add a `scrape` directive in a service provider to parse HTML dynamically in views, but this requires extra setup.
How do I handle errors when parsing malformed HTML?
The package throws warnings or errors for invalid HTML. Wrap parsing in a `try-catch` block or use `@error_reporting(0)` temporarily to suppress warnings. For robust handling, validate HTML with a library like `HTMLPurifier` before parsing.
What are the alternatives if I need PHP 8.x support or modern features?
For PHP 8.x, use `symfony/dom-crawler` (lightweight, modern) or `Goutte` (Laravel-friendly with browser simulation). For JavaScript-heavy pages, consider `Symfony Panther` (headless Chrome). If you need Laravel-specific tools, check `spatie/array-to-html` for HTML generation or `laravelcollective/html` for legacy Blade helpers.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
besmartand-pro/php-quality-config
sentix/ai-chatbot
terminal42/code-quality-tools
codifyo/ts-generator-bundle
testo/fiber
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity