simple tools for advanced web related actions
Project description
hyperprotocols
Advanced Web Utilities
hyperprotocols is a Python package that provides advanced utilities for web scraping, HTML manipulation, and API interaction.
Installation
pip install hyperprotocols
Features
- HYPERTEXT: Extract and manipulate HTML content into structured data
- TRANSFERPROTOCOLS: Utilities for API interactions, including payload fuzzing, pagination handling, and ultimate recursion
Usage
HYPERTEXT
Extract and manipulate HTML content:
from hyperprotocols.HYPERTEXT import hypertext
# Fetch and parse HTML content
content = hypertext.fetch("https://example.com")
html = hypertext(content)
# Convert HTML to structured schema
schema = html.Schematize()
'''
Outputs:
{
"selector": "[document]",
"class": [],
"id": "",
"path": "",
"content": "Example DomainExample DomainThis domain is for use in illustrative examples in documents. You may use this\n domain in literature without prior coordination or asking for permission.More information...",
"count": 1,
"children": [
{
"selector": "html",
"class": [],
"id": "",
"path": "",
"content": "Example DomainExample DomainThis domain is for use in illustrative examples in documents. You may use this\n domain in literature without prior coordination or asking for permission.More information...",
"count": 1,
"children": [
{
"selector": "head",
"class": [],
"id": "",
"path": "html",
"content": "Example Domain",
"count": 1,
"children": [
{
"selector": "title",
"class": [],
"id": "",
"path": "html > head",
"content": "Example Domain",
"count": 1,
"children": []
},
{
"selector": "meta",
"class": [],
"id": "",
"path": "html > head",
"content": "",
"count": 1,
"children": []
},
{
"selector": "meta",
"class": [],
"id": "",
"path": "html > head",
"content": "",
"count": 1,
"children": []
},
{
"selector": "meta",
"class": [],
"id": "",
"path": "html > head",
"content": "",
"count": 1,
"children": []
},
{
"selector": "style",
"class": [],
"id": "",
"path": "html > head",
"content": "body {\n background-color: #f0f0f2;\n margin: 0;\n padding: 0;\n font-family: -apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n \n }\n div {\n width: 600px;\n margin: 5em auto;\n padding: 2em;\n background-color: #fdfdff;\n border-radius: 0.5em;\n box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);\n }\n a:link, a:visited {\n color: #38488f;\n text-decoration: none;\n }\n @media (max-width: 700px) {\n div {\n margin: 0 auto;\n width: auto;\n }\n }",
"count": 1,
"children": []
}
]
},
{
"selector": "body",
"class": [],
"id": "",
"path": "html",
"content": "Example DomainThis domain is for use in illustrative examples in documents. You may use this\n domain in literature without prior coordination or asking for permission.More information...",
"count": 1,
"children": [
{
"selector": "div",
"class": [],
"id": "",
"path": "html > body",
"content": "Example DomainThis domain is for use in illustrative examples in documents. You may use this\n domain in literature without prior coordination or asking for permission.More information...",
"count": 1,
"children": [
{
"selector": "h1",
"class": [],
"id": "",
"path": "html > body > div",
"content": "Example Domain",
"count": 1,
"children": []
},
{
"selector": "p",
"class": [],
"id": "",
"path": "html > body > div",
"content": "This domain is for use in illustrative examples in documents. You may use this\n domain in literature without prior coordination or asking for permission.",
"count": 1,
"children": []
},
{
"selector": "p",
"class": [],
"id": "",
"path": "html > body > div",
"content": "More information...",
"count": 1,
"children": [
{
"selector": "a",
"class": [],
"id": "",
"path": "html > body > div > p",
"content": "More information...",
"count": 1,
"children": [],
"urls": {
"href": "https://www.iana.org/domains/example"
}
}
]
}
]
}
]
}
]
}
]
}
'''
TRANSFERPROTOCOLS
Fuzz API payloads and handle paginated requests:
from hyperprotocols.TRANSFERPROTOCOLS import PayloadFuzzer, recursively
import requests
payload = {
'keywords': '',
'brands': 'gucci',
'categories': 'shirts',
'page': 1
}
# Handle paginated API requests
@recursively(pkwarg='payload', paginator='page', breakat=50)
def fetch(payload):
url = "http://example.com"
with PayloadFuzzer(payload, fuzzable=['keywords', 'brands', 'categories']) as variations:
for variant in variations:
response = requests.get(url, variation)
# Your request processing logic here
pass
'''
fuzzed variations:
{'keywords': 'gucci', 'brands': '', 'categories': 'shirts', 'page': 1}
> brand swapped into a keyword
> > with recursively:
> > > [{'keywords': 'gucci', 'brands': '', 'categories': 'shirts', 'page': 1}, {'keywords': 'gucci', 'brands': '', 'categories': 'shirts', 'page': 2}, ...{'keywords': 'gucci', 'brands': '', 'categories': 'shirts', 'page': 50}]
{'keywords': 'shirts', 'brands': 'gucci', 'categories': '', 'page': 1}
> category swapped into a keyword
> > with recursively:
> > > [{'keywords': 'shirts', 'brands': 'gucci', 'categories': '', 'page': 1}, {'keywords': 'shirts', 'brands': 'gucci', 'categories': '', 'page': 2}, ...{'keywords': 'shirts', 'brands': 'gucci', 'categories': '', 'page': 50}]
{'keywords': 'gucci shirts', 'brands': '', 'categories': '', 'page': 1}
> brand and category swapped into a keyword
> > with recursively:
> > > [{'keywords': 'gucci shirts', 'brands': '', 'categories': '', 'page': 1}, {'keywords': 'gucci shirts', 'brands': '', 'categories': '', 'page': 2}, ... {'keywords': 'gucci shirts', 'brands': '', 'categories': '', 'page': 50}]
'''
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hyperprotocols-0.0.5.tar.gz.
File metadata
- Download URL: hyperprotocols-0.0.5.tar.gz
- Upload date:
- Size: 7.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8e959314456a8ff67f59b944f13e8fcc134b01f9c4b72a2d768498b3f475fb74
|
|
| MD5 |
ea76e888b38bac3ce1c73b95ec15b530
|
|
| BLAKE2b-256 |
d02b0ec8fa69b305c47f6dfab9c6cbdd4513537ecea5b9d2d17e141d91ff955b
|
File details
Details for the file hyperprotocols-0.0.5-py3-none-any.whl.
File metadata
- Download URL: hyperprotocols-0.0.5-py3-none-any.whl
- Upload date:
- Size: 8.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eb1d8d2e832a562588cbd6ff33ce3cd574c8371cbae74b615eaf25eee7059989
|
|
| MD5 |
25690ec64dd15382283681d789270d39
|
|
| BLAKE2b-256 |
b742fcda9c3a3378c01e6cad3865ee8d5ff185fa0e4a83ddec43abdf3b4f922d
|