===========================================================================================
piedomains: predict the kind of content hosted by a domain based on domain name and content
===========================================================================================
.. image:: https://img.shields.io/pypi/v/piedomains.svg
:target: https://pypi.python.org/pypi/piedomains
.. image:: https://readthedocs.org/projects/piedomains/badge/?version=latest
:target: http://piedomains.readthedocs.io/en/latest/?badge=latest
:alt: Documentation Status
.. image:: https://pepy.tech/badge/piedomains
:target: https://pepy.tech/project/piedomains
The package infers the kind of content hosted by domain using the domain name, and the content, and screenshot from the homepage.
We use domain category labels from `Shallalist <https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/ZXTQ7V>`__ and build our own training dataset by scraping and taking screenshots of the homepage. The final dataset used to train the model is posted on the `Harvard Dataverse <https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/ZXTQ7V>`__. Python notebooks used to build the models can be found `here <https://github.com/themains/piedomains/tree/55cd5ea68ccec58ab2152c5f1d6fb9e6cf5df363/piedomains/notebooks>`__ and the model files can be found `here <https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/YHWCDC>`__
Installation
--------------
We strongly recommend installing `piedomains` inside a Python virtual environment
(see `venv documentation <https://docs.python.org/3/library/venv.html#creating-virtual-environments>`__)
::
pip install piedomains
General API
-----------
1. **domain.pred_shalla_cat_with_text(input)**
- What it does:
- Predicts the kind of content hosted by a domain based on domain name and HTML of the homepage.
- The function can use locally stored HTML files or fetch fresh HTML files.
- If you specify a local folder, the function will look for HTML files corresponding to the domain.
- The HTML files must be stored as `domainname.html`.
- The function returns a pandas dataframe with label and corresponding probabilities.
- Inputs:
- `input`: list of domains. Either `input` or `html_path` must be specified.
- `html_path`: path to the folder where the HTMLs are stored. Either `input` or `html_path` must be specified.
- `latest`: use the latest model. Default is `True.`
- Note: The function will by default look for a `html` folder on the same level as model files.
- Output:
- Returns a pandas dataframe with label and probabilities
- Sample usage:
::
from piedomains import domain
domains = [
"forbes.com",
"xvideos.com",
"last.fm",
"facebook.com",
"bellesa.co",
"marketwatch.com"
]
# with only domains
result = domain.pred_shalla_cat_with_text(domains)
# with html path where htmls are stored (offline mode)
result = domain.pred_shalla_cat_with_text(html_path="path/to/htmls")
# with domains and html path, html_path will be used to store htmls
result = domain.pred_shalla_cat_with_text(domains, html_path="path/to/htmls")
print(result)
- Sample output:
::
domain text_label text_prob \
0 xvideos.com porn 0.918919
1 marketwatch.com finance 0.627119
2 forbes.com news 0.575000
3 bellesa.co porn 0.962932
4 facebook.com recreation 0.200815
5 last.fm music 0.229545
text_domain_probs used_domain_text \
0 {'adv': 0.001249639527059502, 'aggressive': 9.... True
1 {'adv': 0.001249639527059502, 'aggressive': 9.... True
2 {'adv': 0.010590500641848523, 'aggressive': 0.... True
3 {'adv': 0.00021545223423966907, 'aggressive': ... True
4 {'adv': 0.006381039197812215, 'aggressive': 0.... True
5 {'adv': 0.002181818181818182, 'aggressive': 0.... True
extracted_text
0 xvideos furry ass history mature rough redhead...
1 marketwatch gold stocks video chrome economy v...
2 forbes featured leadership watch money breakin...
3 bellesa audio vixen sensual passionate orgy ki...
4 facebook watch messenger portal bulletin oculus
5 last twitter music reset company back merchand...
2. **domain.pred_shalla_cat_with_images(input)**
- What it does:
- Predicts the kind of content hosted by a domain based on screenshot of the homepage.
- The function can use locally stored screenshots files or fetch fresh screenshots of the homepage.
- If you specify a local folder, the function will look for jpegs corresponding to the domain.
- The screenshots must be stored as `domainname.jpg`.
- The function returns a pandas dataframe with label and corresponding probabilities.
- Inputs:
- `input`: list of domains. Either `input` or `image_path` must be specified.
- `image_path`: path to the folder where the screenshots are stored. Either `input` or `image_path` must be specified.
- `latest`: use the latest model. Default is `True.`
- Note: The function will by default look for a `images`` folder on the same level as model files.
- Output:
- Returns panda dataframe with label and probabilities
- Sample usage:
::
from piedomains import domain
domains = [
"forbes.com",
"xvideos.com",
"last.fm",
"facebook.com",
"bellesa.co",
"marketwatch.com"
]
# with only domains
result = domain.pred_shalla_cat_with_images(domains)
# with image path where images are stored (offline mode)
result = domain.pred_shalla_cat_with_images(image_path="path/to/images")
# with domains and image path, image_path will be used to store images
result = domain.pred_shalla_cat_with_images(domains, image_path="path/to/images")
print(result)
- Sample output:
::
domain image_label image_prob \
0 bellesa.co shopping 0.366663
1 facebook.com porn 0.284601
2 marketwatch.com recreation 0.367953
3 xvideos.com porn 0.916550
4 forbes.com recreation 0.415165
5 last.fm shopping 0.303097
image_domain_probs used_domain_screenshot
0 {'adv': 0.0009261096129193902, 'aggressive': 3... True
1 {'adv': 0.030470917001366615, 'aggressive': 0.... True
2 {'adv': 0.006861348636448383, 'aggressive': 0.... True
3 {'adv': 0.0004964823601767421, 'aggressive': 0... True
4 {'adv': 0.0016061498317867517, 'aggressive': 8... True
5 {'adv': 0.007956285960972309, 'aggressive': 0.... True
3. **domain.pred_shalla_cat(input)**
- What it does:
- Predicts the kind of content hosted by a domain based on screenshot of the homepage.
- The function can use locally stored screenshots and HTMLs or fetch fresh data.
- If you specify local folders, the function will look for jpegs corresponding to the domain.
- The screenshots must be stored as `domainname.jpg`.
- The HTML files must be stored as `domainname.html`.
- The function returns a pandas dataframe with label and corresponding probabilities.
- Inputs:
- `input`: list of domains. Either `input` or `html_path` must be specified.
- `html_path`: path to the folder where the screenshots are stored. Either `input`, `image_path`, or `html_path` must be specified.
- `image_path`: path to the folder where the screenshots are stored. Either `input`, `image_path`, or `html_path` must be specified.
- `latest`: use the latest model. Default is `True.`
- Note: The function will by default look for a `html` folder on the same level as model files.
- Note: The function will by default look for a `images` folder on the same level as model files.
- Output
- Returns panda dataframe with label and probabilities
- Sample usage:
::
from piedomains import domain
domains = [
"forbes.com",
"xvideos.com",
"last.fm",
"facebook.com",
"bellesa.co",
"marketwatch.com"
]
# with only domains
result = domain.pred_shalla_cat(domains)
# with html path where htmls are stored (offline mode)
result = domain.pred_shalla_cat(html_path="path/to/htmls")
# with image path where images are stored (offline mode)
result = domain.pred_shalla_cat(image_path="path/to/images")
print(result)
- Sample output:
::
domain text_label text_prob \
0 xvideos.com porn 0.918919
1 marketwatch.com finance 0.627119
2 forbes.com news 0.575000
3 bellesa.co porn 0.962932
4 facebook.com recreation 0.200815
5 last.fm music 0.229545
text_domain_probs used_domain_text \
0 {'adv': 0.001249639527059502, 'aggressive': 9.... True
1 {'adv': 0.001249639527059502, 'aggressive': 9.... True
2 {'adv': 0.010590500641848523, 'aggressive': 0.... True
3 {'adv': 0.00021545223423966907, 'aggressive': ... True
4 {'adv': 0.006381039197812215, 'aggressive': 0.... True
5 {'adv': 0.002181818181818182, 'aggressive': 0.... True
extracted_text image_label image_prob \
0 xvideos furry ass history mature rough redhead... porn 0.916550
1 marketwatch gold stocks video chrome economy v... recreation 0.370665
2 forbes featured leadership watch money breakin... recreation 0.422517
3 bellesa audio vixen sensual passionate orgy ki... porn 0.409875
4 facebook watch messenger portal bulletin oculus porn 0.284601
5 last twitter music reset company back merchand... shopping 0.420788
image_domain_probs used_domain_screenshot \
0 {'adv': 0.0004964823601767421, 'aggressive': 0... True
1 {'adv': 0.007065971381962299, 'aggressive': 0.... True
2 {'adv': 0.0016623957781121135, 'aggressive': 7... True
3 {'adv': 0.0008810096187517047, 'aggressive': 0... True
4 {'adv': 0.030470917001366615, 'aggressive': 0.... True
5 {'adv': 0.01235155574977398, 'aggressive': 0.0... True
label label_prob combined_domain_probs
0 porn 0.917735 {'adv': 0.0008730609436181221, 'aggressive': 0...
1 finance 0.315346 {'adv': 0.004157805454510901, 'aggressive': 0....
2 news 0.367533 {'adv': 0.006126448209980318, 'aggressive': 0....
3 porn 0.686404 {'adv': 0.0005482309264956868, 'aggressive': 0...
4 porn 0.223327 {'adv': 0.018425978099589416, 'aggressive': 0....
5 shopping 0.232422 {'adv': 0.007266686965796081, 'aggressive': 0....
Authors
-------
Rajashekar Chintalapati and Gaurav Sood
Contributor Code of Conduct
---------------------------------
The project welcomes contributions from everyone! In fact, it depends on
it. To maintain this welcoming atmosphere, and to collaborate in a fun
and productive way, we expect contributors to the project to abide by
the `Contributor Code of Conduct <http://contributor-covenant.org/version/1/0/0/>`__.
License
----------
The package is released under the `MIT License <https://opensource.org/licenses/MIT>`__.
Raw data
{
"_id": null,
"home_page": "https://github.com/themains/piedomains",
"name": "piedomains",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "predict category based on domain name and it's content",
"author": "Rajashekar Chintalapati and Gaurav Sood",
"author_email": "rajshekar.ch@gmail.com, gsood07@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/77/87/5fd6b79f7da87aeaca3c409eae3ae6a74eac25b429187be23bf329ed1447/piedomains-0.0.18.tar.gz",
"platform": null,
"description": "===========================================================================================\npiedomains: predict the kind of content hosted by a domain based on domain name and content\n===========================================================================================\n\n\n.. image:: https://img.shields.io/pypi/v/piedomains.svg\n :target: https://pypi.python.org/pypi/piedomains\n.. image:: https://readthedocs.org/projects/piedomains/badge/?version=latest\n :target: http://piedomains.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n.. image:: https://pepy.tech/badge/piedomains\n :target: https://pepy.tech/project/piedomains\n\n\nThe package infers the kind of content hosted by domain using the domain name, and the content, and screenshot from the homepage. \n\nWe use domain category labels from `Shallalist <https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/ZXTQ7V>`__ and build our own training dataset by scraping and taking screenshots of the homepage. The final dataset used to train the model is posted on the `Harvard Dataverse <https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/ZXTQ7V>`__. Python notebooks used to build the models can be found `here <https://github.com/themains/piedomains/tree/55cd5ea68ccec58ab2152c5f1d6fb9e6cf5df363/piedomains/notebooks>`__ and the model files can be found `here <https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/YHWCDC>`__\n\nInstallation\n--------------\nWe strongly recommend installing `piedomains` inside a Python virtual environment\n(see `venv documentation <https://docs.python.org/3/library/venv.html#creating-virtual-environments>`__)\n\n::\n\n pip install piedomains\n\nGeneral API\n-----------\n1. **domain.pred_shalla_cat_with_text(input)**\n\n - What it does:\n\n - Predicts the kind of content hosted by a domain based on domain name and HTML of the homepage. \n - The function can use locally stored HTML files or fetch fresh HTML files. \n - If you specify a local folder, the function will look for HTML files corresponding to the domain. \n - The HTML files must be stored as `domainname.html`. \n - The function returns a pandas dataframe with label and corresponding probabilities.\n\n - Inputs:\n\n - `input`: list of domains. Either `input` or `html_path` must be specified.\n - `html_path`: path to the folder where the HTMLs are stored. Either `input` or `html_path` must be specified. \n - `latest`: use the latest model. Default is `True.`\n - Note: The function will by default look for a `html` folder on the same level as model files.\n\n - Output:\n\n - Returns a pandas dataframe with label and probabilities\n\n - Sample usage:\n ::\n \n from piedomains import domain\n domains = [\n \"forbes.com\",\n \"xvideos.com\",\n \"last.fm\",\n \"facebook.com\",\n \"bellesa.co\",\n \"marketwatch.com\"\n ]\n # with only domains\n result = domain.pred_shalla_cat_with_text(domains)\n # with html path where htmls are stored (offline mode)\n result = domain.pred_shalla_cat_with_text(html_path=\"path/to/htmls\")\n # with domains and html path, html_path will be used to store htmls\n result = domain.pred_shalla_cat_with_text(domains, html_path=\"path/to/htmls\")\n print(result)\n - Sample output:\n ::\n\n domain text_label text_prob \\\n 0 xvideos.com porn 0.918919 \n 1 marketwatch.com finance 0.627119 \n 2 forbes.com news 0.575000 \n 3 bellesa.co porn 0.962932 \n 4 facebook.com recreation 0.200815 \n 5 last.fm music 0.229545 \n\n text_domain_probs used_domain_text \\\n 0 {'adv': 0.001249639527059502, 'aggressive': 9.... True \n 1 {'adv': 0.001249639527059502, 'aggressive': 9.... True \n 2 {'adv': 0.010590500641848523, 'aggressive': 0.... True \n 3 {'adv': 0.00021545223423966907, 'aggressive': ... True \n 4 {'adv': 0.006381039197812215, 'aggressive': 0.... True \n 5 {'adv': 0.002181818181818182, 'aggressive': 0.... True \n\n extracted_text \n 0 xvideos furry ass history mature rough redhead... \n 1 marketwatch gold stocks video chrome economy v... \n 2 forbes featured leadership watch money breakin... \n 3 bellesa audio vixen sensual passionate orgy ki... \n 4 facebook watch messenger portal bulletin oculus \n 5 last twitter music reset company back merchand... \n\n2. **domain.pred_shalla_cat_with_images(input)**\n\n - What it does:\n\n - Predicts the kind of content hosted by a domain based on screenshot of the homepage. \n - The function can use locally stored screenshots files or fetch fresh screenshots of the homepage. \n - If you specify a local folder, the function will look for jpegs corresponding to the domain. \n - The screenshots must be stored as `domainname.jpg`. \n - The function returns a pandas dataframe with label and corresponding probabilities.\n\n - Inputs:\n\n - `input`: list of domains. Either `input` or `image_path` must be specified.\n - `image_path`: path to the folder where the screenshots are stored. Either `input` or `image_path` must be specified. \n - `latest`: use the latest model. Default is `True.`\n - Note: The function will by default look for a `images`` folder on the same level as model files.\n\n - Output:\n\n - Returns panda dataframe with label and probabilities\n\n - Sample usage:\n ::\n \n from piedomains import domain\n domains = [\n \"forbes.com\",\n \"xvideos.com\",\n \"last.fm\",\n \"facebook.com\",\n \"bellesa.co\",\n \"marketwatch.com\"\n ]\n # with only domains\n result = domain.pred_shalla_cat_with_images(domains)\n # with image path where images are stored (offline mode)\n result = domain.pred_shalla_cat_with_images(image_path=\"path/to/images\")\n # with domains and image path, image_path will be used to store images\n result = domain.pred_shalla_cat_with_images(domains, image_path=\"path/to/images\")\n print(result)\n - Sample output:\n ::\n\n domain image_label image_prob \\\n 0 bellesa.co shopping 0.366663 \n 1 facebook.com porn 0.284601 \n 2 marketwatch.com recreation 0.367953 \n 3 xvideos.com porn 0.916550 \n 4 forbes.com recreation 0.415165 \n 5 last.fm shopping 0.303097 \n\n image_domain_probs used_domain_screenshot \n 0 {'adv': 0.0009261096129193902, 'aggressive': 3... True \n 1 {'adv': 0.030470917001366615, 'aggressive': 0.... True \n 2 {'adv': 0.006861348636448383, 'aggressive': 0.... True \n 3 {'adv': 0.0004964823601767421, 'aggressive': 0... True \n 4 {'adv': 0.0016061498317867517, 'aggressive': 8... True \n 5 {'adv': 0.007956285960972309, 'aggressive': 0.... True \n\n3. **domain.pred_shalla_cat(input)**\n\n - What it does:\n\n - Predicts the kind of content hosted by a domain based on screenshot of the homepage. \n - The function can use locally stored screenshots and HTMLs or fetch fresh data. \n - If you specify local folders, the function will look for jpegs corresponding to the domain. \n - The screenshots must be stored as `domainname.jpg`. \n - The HTML files must be stored as `domainname.html`. \n - The function returns a pandas dataframe with label and corresponding probabilities.\n\n - Inputs:\n\n - `input`: list of domains. Either `input` or `html_path` must be specified.\n - `html_path`: path to the folder where the screenshots are stored. Either `input`, `image_path`, or `html_path` must be specified. \n - `image_path`: path to the folder where the screenshots are stored. Either `input`, `image_path`, or `html_path` must be specified. \n - `latest`: use the latest model. Default is `True.`\n - Note: The function will by default look for a `html` folder on the same level as model files.\n - Note: The function will by default look for a `images` folder on the same level as model files.\n\n - Output\n\n - Returns panda dataframe with label and probabilities\n\n - Sample usage:\n ::\n \n from piedomains import domain\n domains = [\n \"forbes.com\",\n \"xvideos.com\",\n \"last.fm\",\n \"facebook.com\",\n \"bellesa.co\",\n \"marketwatch.com\"\n ]\n # with only domains\n result = domain.pred_shalla_cat(domains)\n # with html path where htmls are stored (offline mode)\n result = domain.pred_shalla_cat(html_path=\"path/to/htmls\")\n # with image path where images are stored (offline mode)\n result = domain.pred_shalla_cat(image_path=\"path/to/images\")\n print(result)\n\n - Sample output:\n ::\n\n domain text_label text_prob \\\n 0 xvideos.com porn 0.918919 \n 1 marketwatch.com finance 0.627119 \n 2 forbes.com news 0.575000 \n 3 bellesa.co porn 0.962932 \n 4 facebook.com recreation 0.200815 \n 5 last.fm music 0.229545 \n\n text_domain_probs used_domain_text \\\n 0 {'adv': 0.001249639527059502, 'aggressive': 9.... True \n 1 {'adv': 0.001249639527059502, 'aggressive': 9.... True \n 2 {'adv': 0.010590500641848523, 'aggressive': 0.... True \n 3 {'adv': 0.00021545223423966907, 'aggressive': ... True \n 4 {'adv': 0.006381039197812215, 'aggressive': 0.... True \n 5 {'adv': 0.002181818181818182, 'aggressive': 0.... True \n\n extracted_text image_label image_prob \\\n 0 xvideos furry ass history mature rough redhead... porn 0.916550 \n 1 marketwatch gold stocks video chrome economy v... recreation 0.370665 \n 2 forbes featured leadership watch money breakin... recreation 0.422517 \n 3 bellesa audio vixen sensual passionate orgy ki... porn 0.409875 \n 4 facebook watch messenger portal bulletin oculus porn 0.284601 \n 5 last twitter music reset company back merchand... shopping 0.420788 \n\n image_domain_probs used_domain_screenshot \\\n 0 {'adv': 0.0004964823601767421, 'aggressive': 0... True \n 1 {'adv': 0.007065971381962299, 'aggressive': 0.... True \n 2 {'adv': 0.0016623957781121135, 'aggressive': 7... True \n 3 {'adv': 0.0008810096187517047, 'aggressive': 0... True \n 4 {'adv': 0.030470917001366615, 'aggressive': 0.... True \n 5 {'adv': 0.01235155574977398, 'aggressive': 0.0... True \n\n label label_prob combined_domain_probs \n 0 porn 0.917735 {'adv': 0.0008730609436181221, 'aggressive': 0... \n 1 finance 0.315346 {'adv': 0.004157805454510901, 'aggressive': 0.... \n 2 news 0.367533 {'adv': 0.006126448209980318, 'aggressive': 0.... \n 3 porn 0.686404 {'adv': 0.0005482309264956868, 'aggressive': 0... \n 4 porn 0.223327 {'adv': 0.018425978099589416, 'aggressive': 0.... \n 5 shopping 0.232422 {'adv': 0.007266686965796081, 'aggressive': 0.... \n\n\nAuthors\n-------\nRajashekar Chintalapati and Gaurav Sood\n\nContributor Code of Conduct\n---------------------------------\nThe project welcomes contributions from everyone! In fact, it depends on\nit. To maintain this welcoming atmosphere, and to collaborate in a fun\nand productive way, we expect contributors to the project to abide by\nthe `Contributor Code of Conduct <http://contributor-covenant.org/version/1/0/0/>`__.\n\nLicense\n----------\nThe package is released under the `MIT License <https://opensource.org/licenses/MIT>`__.\n",
"bugtrack_url": null,
"license": "MIT License",
"summary": "Predict categories based domain names and it's content",
"version": "0.0.18",
"split_keywords": [
"predict",
"category",
"based",
"on",
"domain",
"name",
"and",
"it's",
"content"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "609d92809a08aef93cb5d8506ee283bc664650213dd5d6462549f9e9ff103144",
"md5": "c757376a03d79026609ad8b8da0174d3",
"sha256": "d9d450cfeaf6b32e076a80ea9be526f20bc5a3fdbbd2d8981704c4dd0d5bbb05"
},
"downloads": -1,
"filename": "piedomains-0.0.18-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "c757376a03d79026609ad8b8da0174d3",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 2971415,
"upload_time": "2023-04-20T22:42:40",
"upload_time_iso_8601": "2023-04-20T22:42:40.565492Z",
"url": "https://files.pythonhosted.org/packages/60/9d/92809a08aef93cb5d8506ee283bc664650213dd5d6462549f9e9ff103144/piedomains-0.0.18-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "77875fd6b79f7da87aeaca3c409eae3ae6a74eac25b429187be23bf329ed1447",
"md5": "2142c3c4c120d4d86ca6f0ad5d28856d",
"sha256": "1c65bbe1901b24a1746605f6cc0fe93cf3f3a8307031b85aeee7334dd8e2e095"
},
"downloads": -1,
"filename": "piedomains-0.0.18.tar.gz",
"has_sig": false,
"md5_digest": "2142c3c4c120d4d86ca6f0ad5d28856d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 2930945,
"upload_time": "2023-04-20T22:42:42",
"upload_time_iso_8601": "2023-04-20T22:42:42.477828Z",
"url": "https://files.pythonhosted.org/packages/77/87/5fd6b79f7da87aeaca3c409eae3ae6a74eac25b429187be23bf329ed1447/piedomains-0.0.18.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-04-20 22:42:42",
"github": true,
"gitlab": false,
"bitbucket": false,
"github_user": "themains",
"github_project": "piedomains",
"travis_ci": true,
"coveralls": false,
"github_actions": true,
"appveyor": true,
"requirements": [
{
"name": "tensorflow",
"specs": [
[
">=",
"2.11.1"
]
]
},
{
"name": "nltk",
"specs": [
[
"==",
"3.7"
]
]
},
{
"name": "bs4",
"specs": [
[
"==",
"0.0.1"
]
]
},
{
"name": "scikit-learn",
"specs": [
[
"==",
"1.2.1"
]
]
},
{
"name": "Pillow",
"specs": [
[
"==",
"9.4.0"
]
]
},
{
"name": "selenium",
"specs": [
[
"==",
"4.8.0"
]
]
},
{
"name": "wheel",
"specs": [
[
"==",
"0.38.0"
]
]
},
{
"name": "pandas",
"specs": [
[
"==",
"1.4.2"
]
]
},
{
"name": "numpy",
"specs": [
[
"==",
"1.22.2"
]
]
}
],
"tox": true,
"lcname": "piedomains"
}