Installer Scrapy sous Windows
Si vous faites du WebScraping, vous connaissez sûrement Scrapy. C’est un framework de développement spécialisé dans ce domaine. Il est développé en Python. Comment l’installer ? Et bien avec le gestionnaire de paquets de Python ! Pourtant, ce n’est pas aussi simple sous Windows…
Sommaire
PIP
Le premier réflexe est d’utiliser PIP mais vous risquez d’obtenir ce message d’erreur :
$ pip install scrapy
running build_ext
building 'twisted.test.raiser' extension
error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools
----------------------------------------
Command ""c:\program files (x86)\python36-32\python.exe" -u -c "import setuptools, tokenize;__file__='C:\\Users\\pnom\\AppData\\Local\\Temp\\pip-build-objb7zhn\\Twisted\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record C:\Users\pnom\AppData\Local\Temp\pip-jrlu6snx-record\install-record.txt --single-version-externally-managed --compile" failed with error code 1 in C:\Users\pnom\AppData\Local\Temp\pip-build-objb7zhn\Twisted\
Selon votre version de Python1, il faut installer la bonne version Visual C++ Build Tools sans oublier d’inclure le SDK correspondant à votre version de Windows.
$ pip install scrapy
Collecting scrapy
Using cached Scrapy-1.4.0-py2.py3-none-any.whl
Requirement already satisfied: six>=1.5.2 in c:\program files (x86)\python36-32\lib\site-packages (from scrapy)
Requirement already satisfied: cssselect>=0.9 in c:\program files (x86)\python36-32\lib\site-packages (from scrapy)
Requirement already satisfied: lxml in c:\program files (x86)\python36-32\lib\site-packages (from scrapy)
Requirement already satisfied: pyOpenSSL in c:\program files (x86)\python36-32\lib\site-packages (from scrapy)
Requirement already satisfied: w3lib>=1.17.0 in c:\program files (x86)\python36-32\lib\site-packages (from scrapy)
Requirement already satisfied: parsel>=1.1 in c:\program files (x86)\python36-32\lib\site-packages (from scrapy)
Requirement already satisfied: queuelib in c:\program files (x86)\python36-32\lib\site-packages (from scrapy)
Requirement already satisfied: PyDispatcher>=2.0.5 in c:\program files (x86)\python36-32\lib\site-packages (from scrapy)
Requirement already satisfied: service-identity in c:\program files (x86)\python36-32\lib\site-packages (from scrapy)
Collecting Twisted>=13.1.0 (from scrapy)
Using cached Twisted-17.9.0.tar.bz2
Requirement already satisfied: cryptography>=1.9 in c:\program files (x86)\python36-32\lib\site-packages (from pyOpenSSL->scrapy)
Requirement already satisfied: pyasn1-modules in c:\program files (x86)\python36-32\lib\site-packages (from service-identity->scrapy)
Requirement already satisfied: pyasn1 in c:\program files (x86)\python36-32\lib\site-packages (from service-identity->scrapy)
Requirement already satisfied: attrs in c:\program files (x86)\python36-32\lib\site-packages (from service-identity->scrapy)
Requirement already satisfied: zope.interface>=4.0.2 in c:\program files (x86)\python36-32\lib\site-packages (from Twisted>=13.1.0->scrapy)
Requirement already satisfied: constantly>=15.1 in c:\program files (x86)\python36-32\lib\site-packages (from Twisted>=13.1.0->scrapy)
Requirement already satisfied: incremental>=16.10.1 in c:\program files (x86)\python36-32\lib\site-packages (from Twisted>=13.1.0->scrapy)
Requirement already satisfied: Automat>=0.3.0 in c:\program files (x86)\python36-32\lib\site-packages (from Twisted>=13.1.0->scrapy)
Requirement already satisfied: hyperlink>=17.1.1 in c:\program files (x86)\python36-32\lib\site-packages (from Twisted>=13.1.0->scrapy)
Requirement already satisfied: idna>=2.1 in c:\program files (x86)\python36-32\lib\site-packages (from cryptography>=1.9->pyOpenSSL->scrapy)
Requirement already satisfied: cffi>=1.7 in c:\program files (x86)\python36-32\lib\site-packages (from cryptography>=1.9->pyOpenSSL->scrapy)
Requirement already satisfied: asn1crypto>=0.21.0 in c:\program files (x86)\python36-32\lib\site-packages (from cryptography>=1.9->pyOpenSSL->scrapy)
Requirement already satisfied: setuptools in c:\program files (x86)\python36-32\lib\site-packages (from zope.interface>=4.0.2->Twisted>=13.1.0->scrapy)
Requirement already satisfied: pycparser in c:\program files (x86)\python36-32\lib\site-packages (from cffi>=1.7->cryptography>=1.9->pyOpenSSL->scrapy)
Installing collected packages: Twisted, scrapy
Running setup.py install for Twisted ... done
Successfully installed Twisted-17.9.0 scrapy-1.4.0
$ scrapy version
Scrapy 1.4.0
Scrapy est fonctionnel mais nous venons d’installer 3 à 6 Go de dépendance… N’y a-t-il pas plus léger ?
Docker
Si vous utilisez déjà Docker, il est alors très simple d’installer Scrapy.
$ docker run --rm -ti -v /`pwd`:`pwd` -w /`pwd` vimagick/scrapyd scrapy version
Scrapy 1.4.0
Cependant, si vous n’utilisez pas régulièrement Docker et que vous n’avez pas Docker for Windows2, cela peut s’avérer peu confortable de démarrer une VM pour Docker à chaque fois que vous avez besoin de Scrapy…
Conda
Il reste alors une dernière alternative avec Conda. Ce gestionnaire de paquets et dépendances supportent de nombreux langages dont le Python. Il existe deux distributions pour utiliser Conda sur Windows : Anaconda et Miniconda. La première pré-installe de nombreux paquets et pèse plus de 3 Go. Alors que la seconde n’installe que les dépendances nécessaires à l’exécution de conda
.
Une fois Miniconda installé, voici comment installer Scrapy :
$ conda install scrapy
Fetching package metadata .............
Solving package specifications: .
Package plan for installation in environment C:\Users\pnom\Miniconda3:
The following NEW packages will be INSTALLED:
appdirs: 1.4.3-py36_0
attrs: 17.3.0-py36hc87868e_0
automat: 0.6.0-py36hc6d8c19_0
constantly: 15.1.0-py36_0
coverage: 4.4.2-py36hd32d05b_0
cssselect: 1.0.1-py36h9989782_0
hyperlink: 17.1.1-py36_0
hypothesis: 3.38.5-py36h987501d_0
incremental: 17.5.0-py36he5b1da3_0
libiconv: 1.15-h1df5818_7
libxml2: 2.9.4-h41ea7b2_6
libxslt: 1.1.29-h0037b19_6
lxml: 4.1.1-py36he0adb16_0
parsel: 1.2.0-py36_0
pyasn1: 0.4.2-py36h22e697c_0
pyasn1-modules: 0.2.1-py36hd1453cb_0
pydispatcher: 2.0.5-py36_0
pympler: 0.5-py36h863af32_0
queuelib: 1.4.2-py36_0
scrapy: 1.4.0-py36h764da0a_1
service_identity: 17.0.0-py36_0
twisted: 17.9.0-py36hfad864c_0
w3lib: 1.18.0-py36h47df3ce_0
zlib: 1.2.11-h8395fce_2
zope: 1.0-py36_0
zope.interface: 4.4.3-py36h56cab3c_0
The following packages will be UPDATED:
conda: 4.3.31-py36_0 --> 4.4.4-py36_0
Proceed ([y]/n)? y
libiconv-1.15- 100% |###############################| Time: 0:00:02 268.92 kB/s
zlib-1.2.11-h8 100% |###############################| Time: 0:00:01 202.03 kB/s
appdirs-1.4.3- 100% |###############################| Time: 0:00:01 12.69 kB/s
constantly-15. 100% |###############################| Time: 0:00:00 411.33 kB/s
coverage-4.4.2 100% |###############################| Time: 0:00:02 116.15 kB/s
cssselect-1.0. 100% |###############################| Time: 0:00:00 63.45 kB/s
hyperlink-17.1 100% |###############################| Time: 0:00:00 218.66 kB/s
incremental-17 100% |###############################| Time: 0:00:00 162.68 kB/s
libxml2-2.9.4- 100% |###############################| Time: 0:00:20 159.71 kB/s
pyasn1-0.4.2-p 100% |###############################| Time: 0:00:00 154.68 kB/s
pydispatcher-2 100% |###############################| Time: 0:00:00 194.36 kB/s
pympler-0.5-py 100% |###############################| Time: 0:00:01 214.31 kB/s
queuelib-1.4.2 100% |###############################| Time: 0:00:00 147.62 kB/s
zope-1.0-py36_ 100% |###############################| Time: 0:00:00 183.81 kB/s
libxslt-1.1.29 100% |###############################| Time: 0:00:02 216.64 kB/s
pyasn1-modules 100% |###############################| Time: 0:00:00 209.03 kB/s
w3lib-1.18.0-p 100% |###############################| Time: 0:00:00 288.31 kB/s
lxml-4.1.1-py3 100% |###############################| Time: 0:00:04 245.57 kB/s
zope.interface 100% |###############################| Time: 0:00:01 147.69 kB/s
parsel-1.2.0-p 100% |###############################| Time: 0:00:00 25.95 kB/s
conda-4.4.4-py 100% |###############################| Time: 0:00:03 185.63 kB/s
attrs-17.3.0-p 100% |###############################| Time: 0:00:00 255.85 kB/s
automat-0.6.0- 100% |###############################| Time: 0:00:00 274.12 kB/s
hypothesis-3.3 100% |###############################| Time: 0:00:00 248.21 kB/s
service_identi 100% |###############################| Time: 0:00:00 172.29 kB/s
twisted-17.9.0 100% |###############################| Time: 0:00:29 168.34 kB/s
scrapy-1.4.0-p 100% |###############################| Time: 0:00:01 309.04 kB/s
$ scrapy.exe version
Scrapy 1.4.0
Conclusion
Peu importe que vous souhaitez installer Scrapy ou non, l’intérêt ici était de montrer les différentes façon d’installer des utilitaires écrits en Python quand on est sous Windows.
En vous souhaitant un happy web scraping !
- La version 2015 pour la 3.6 et la version 2017 pour la 3.7. Source : https://www.scivision.co/python-windows-visual-c++-14-required/ ↩
- Docker for Windows a été remplacé par Docker Desktop qui propose de meilleures performances avec WSL2. ↩
Bonjour,
Merci, vous avez sauvé mon cours de Python sur OpenClassroom, où je n’arrivait pas à installer Scrapy !!