You can use the SQL Query Composer in the WFS Server Connection Dialog when adding the data. There you can create a spatial filter.

EDIT:
For using WFS via GeoServer in python and setting a bounding-box GeoServer requires a POST rather than a GET request as statet here:
https://docs.geoserver.org/latest/en/user/services/wfs/reference.html
"While there are limited options available in a GET request for spatial queries (more are available in POST requests using filters), filtering by bounding box (BBOX) is supported."
So one approach would be to query the data in your script beforehand making a post request and from the result create the layer on the fly:
That's how your query would look like in curl:
curl --location --request POST 'https://wxs.ign.fr/administratif/geoportail/wfs?VERSION=2.0.0&TYPENAMES=ADMINEXPRESS-COG-CARTO.LATEST:arrondissement&COUNT=1000&SRSNAME=EPSG:4326&BBOX=47.0,2.7,47.1,2.8&request=GetFeature&outputFormat=json'
In QGIS you could load the data using urllib like:
from urllib import request, parse
import json
# Query Data
url = 'https://wxs.ign.fr/administratif/geoportail/wfs?VERSION=2.0.0&TYPENAMES=ADMINEXPRESS-COG-CARTO.LATEST:arrondissement&COUNT=1000&SRSNAME=EPSG:4326&BBOX=47.0,2.7,47.1,2.8&request=GetFeature&outputFormat=json'
req = request.Request(url, method="POST")
r = request.urlopen(req)
content = r.read().decode('utf-8')
print(content)
# Add Layer
vlayer = QgsVectorLayer(content,"Some Data","ogr")
QgsProject.instance().addMapLayer(vlayer)
Note:
I changed your initial bounding box in the sample to a smaller value - your initial bounding box result has around 8MB of data.
