feat(cli): adding terminal command scrapling install
Instead of making users install browsers by themself
This commit is contained in:
@@ -5,3 +5,5 @@ skips:
|
||||
- B410
|
||||
- B113 # `Requests call without timeout` these requests are done in the benchmark and examples scripts only
|
||||
- B403 # We are using pickle for tests only
|
||||
- B404 # Using subprocess library
|
||||
- B602 # subprocess call with shell=True identified
|
||||
|
||||
@@ -4,7 +4,10 @@ include *.js
|
||||
include scrapling/engines/toolbelt/bypasses/*.js
|
||||
include scrapling/*.db
|
||||
include scrapling/*.db*
|
||||
include scrapling/*.db-*
|
||||
include scrapling/py.typed
|
||||
include scrapling/.scrapling_dependencies_installed
|
||||
include .scrapling_dependencies_installed
|
||||
|
||||
recursive-exclude * __pycache__
|
||||
recursive-exclude * *.py[co]
|
||||
@@ -0,0 +1,37 @@
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
import click
|
||||
|
||||
|
||||
def get_package_dir():
|
||||
return Path(os.path.dirname(__file__))
|
||||
|
||||
|
||||
def run_command(command, line):
|
||||
print(f"Installing {line}...")
|
||||
_ = subprocess.check_call(command, shell=True)
|
||||
# I meant to not use try except here
|
||||
|
||||
|
||||
@click.command(help="Install all Scrapling's Fetchers dependencies")
|
||||
def install():
|
||||
if not get_package_dir().joinpath(".scrapling_dependencies_installed").exists():
|
||||
run_command([sys.executable, "-m", "playwright", "install", 'chromium'], 'Playwright browsers')
|
||||
run_command([sys.executable, "-m", "playwright", "install-deps", 'chromium', 'firefox'], 'Playwright dependencies')
|
||||
run_command([sys.executable, "-m", "camoufox", "fetch", '--browserforge'], 'Camoufox browser and databases')
|
||||
# if no errors raised by above commands, then we add below file
|
||||
get_package_dir().joinpath(".scrapling_dependencies_installed").touch()
|
||||
else:
|
||||
print('The dependencies are already installed')
|
||||
|
||||
|
||||
@click.group()
|
||||
def main():
|
||||
pass
|
||||
|
||||
|
||||
# Adding commands
|
||||
main.add_command(install)
|
||||
@@ -20,6 +20,11 @@ setup(
|
||||
package_dir={
|
||||
"scrapling": "scrapling",
|
||||
},
|
||||
entry_points={
|
||||
'console_scripts': [
|
||||
'scrapling=scrapling.cli:main'
|
||||
],
|
||||
},
|
||||
include_package_data=True,
|
||||
classifiers=[
|
||||
"Operating System :: OS Independent",
|
||||
@@ -50,6 +55,7 @@ setup(
|
||||
"requests>=2.3",
|
||||
"lxml>=4.5",
|
||||
"cssselect>=1.2",
|
||||
'click',
|
||||
"w3lib",
|
||||
"orjson>=3",
|
||||
"tldextract",
|
||||
|
||||
Reference in New Issue
Block a user