Robots Text Processor
A Python package for processing and validating robots.txt files according to the Robots Exclusion Protocol (REP) RFC.
Features
- Parse and process robots.txt files
- Extract user-agent rules, allow/disallow directives, and sitemaps
- Test URLs against robots.txt rules
- Validate robots.txt files for compliance with REP RFC
- Generate hashes for content tracking
- Comprehensive error and warning reporting
Installation
pip install robotstxt-package
Usage
Basic Usage
from robotstxt import robots_file
# Create a RobotsFile instance
robots = robots_file("""
User-agent: *
Allow: /
Disallow: /private/
Sitemap: https://example.com/sitemap.xml
""")
# Test a URL
result = robots.test_url("https://example.com/private/page", "*")
print(result) # {'disallowed': True, 'matching_rule': '/private/'}
# Get sitemaps
for sitemap in robots.sitemaps:
print(sitemap.url)
Validation
The package includes comprehensive validation of robots.txt files:
from robotstxt import robots_file
# Create a RobotsFile instance
robots = robots_file("""
User-agent: *
Allow: /
Disallow: /private/
Sitemap: https://example.com/sitemap.xml
""")
# Check for validation errors
if robots.has_errors():
for error in robots.get_validation_errors():
print(f"Error: {error.message} (Line {error.line_number})")
# Check for validation warnings
if robots.has_warnings():
for warning in robots.get_validation_warnings():
print(f"Warning: {warning.message} (Line {warning.line_number})")
The validation system checks for:
- File size exceeding 500KB
- UTF-8 Byte Order Mark (BOM) presence
- Invalid characters in lines
- Proper directive formatting (user-agent, allow, disallow, sitemap)
- Rule block structure (user-agent directives before allow/disallow rules)
- Valid sitemap URLs
- Duplicate rules for the same user-agent
- And more...
Content Tracking
The package provides hashing functionality for tracking changes:
from robotstxt import robots_file
robots = robots_file(content)
# Get content hash
print(robots.hash_raw) # SHA-256 hash of raw content
# Get rules hash
print(robots.hash_material) # SHA-256 hash of processed rules
# Get sitemaps hash
print(robots.hash_sitemaps) # SHA-256 hash of sitemap URLs
Validation Rules
The package validates robots.txt files according to the following rules:
-
File Size
- Warning if file exceeds 500KB
- Error if file exceeds 512KB
-
Character Encoding
- Error if file contains UTF-8 BOM
- Error if file contains invalid characters
-
Directive Format
- Error for invalid directive format
- Error for missing user-agent before allow/disallow rules
- Warning for common typos in directives
-
Rule Structure
- Error for duplicate rule blocks
- Warning for conflicting allow/disallow rules
- Warning for overly broad rules
-
Sitemaps
- Error for invalid sitemap URLs
- Warning for multiple sitemaps
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
compare_robots_files(robots1, robots2)
Compares two robots.txt files and generates a structured diff showing:
- Material differences between the files
- Per-token changes showing added and removed rules
- Sitemap changes
The function normalizes the rules before comparison to ensure accurate diffing regardless of:
- Rule ordering within token groups
- Whitespace differences
- Case sensitivity in tokens
- Duplicate rules
Returns a dictionary containing:
- materially_different: Boolean indicating if the files have different rules
- token_diffs: Dictionary of differences per token
- sitemap_changes: Dictionary of sitemap differences
Example usage
robots1 = RobotsFile(old_content) robots2 = RobotsFile(new_content)
Either way works:
diff = compare_robots_files(robots1, robots2)
or
diff = robots1.compare_with(robots2)
Example output structure:
{
"materially_different": True,
"token_diffs": {
"googlebot": {
"added": ["Allow: /new-path/", "Disallow: /private/"],
"removed": ["Disallow: /old-path/"]
},
"bingbot": {
"added": ["Disallow: /api/"],
"removed": []
}
},
"sitemap_changes": {
"added": ["https://example.com/new-sitemap.xml"],
"removed": ["https://example.com/old-sitemap.xml"]
}
}
Metadata
Release files for robotstxt 1.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| robotstxt-1.1.2.tar.gz | 16.4 kB | Without provenance | Details for robotstxt-1.1.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| robotstxt-1.1.2-py3-none-any.whl | Python 3 | none | any | Details for robotstxt-1.1.2-py3-none-any.whl |
Total release size: 34.4 kB
Release files / robotstxt-1.1.2.tar.gz
| Download URL | robotstxt-1.1.2.tar.gz |
|---|---|
| Size | 16.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ab406b1f7d4d348403a0df1542425637c954b623102e67805391cb5de5adad54
|
|
BLAKE2b-256 checksum How to use checksums |
981c17ea5d9b8548826ed790aeebee65e78d2e4756e93c671c16570cf38f2312
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / robotstxt-1.1.2-py3-none-any.whl
| Download URL | robotstxt-1.1.2-py3-none-any.whl |
|---|---|
| Size | 18.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
38fcb6c6dea6566ceffeb1e44c88f1015a96585084d232fc9de151dbd25da1c6
|
|
BLAKE2b-256 checksum How to use checksums |
120eadc571886b6a4c41e1382972ee853895a14dd67a606867e24c12d482e40b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Security for robotstxt 1.1.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.