Analyse CSS avec cssutils en Python

Une note lorsque vous grattez un site Web en Python et que vous devez analyser le CSS écrit en ligne dans l'attribut style de la balise.

Sélection de la bibliothèque

Beautiful Soup ne semble pas être capable de gérer le CSS, alors recherchez une bibliothèque qui répond à vos besoins.

J'ai cherché avec PyPI et j'ai décidé d'utiliser cssutils qui apparaissait en haut. La Documentation est écrite correctement, et il semble que le développement se poursuit, donc ça a l'air bien.

Cette fois, je l'ai essayé dans l'environnement de Python 3.3.3. L'installation est un coup avec pip.

$ python -V
Python 3.3.3
$ pip install cssutils

Perspective CSS

Cette fois, nous analyserons le CSS en ligne, nous utiliserons donc cssutils.parseStyle. Il existe différentes interfaces pour l'analyse, et bien que je ne l'ai pas essayé cette fois, il semble que vous puissiez également analyser en spécifiant le nom du fichier ou l'URL. Vous pouvez également spécifier le code de caractère avec un argument facultatif.

>>> from cssutils import parseStyle
>>> style = parseStyle('width: 300px; margin: 0 20px 0 10px;')
>>> type(style)
<class 'cssutils.css.cssstyledeclaration.CSSStyleDeclaration'>

L'analyse du CSS en ligne donne un objet de la classe cssutils.css.CSSStyleDeclaration. Ce que nous voulons faire cette fois est d'obtenir les valeurs spécifiées par les propriétés width et margin à partir d'ici.

Obtenir des propriétés et des valeurs

Il est facile d'obtenir la valeur d'une propriété sous forme de chaîne.

>>> style.width
'300px'
>>> style.margin
'0 20px 0 10px'

Utilisez les objets des classes cssutils.css.Property et cssutils.css.PropertyValue lorsque vous souhaitez analyser un peu plus en détail, par exemple lorsque la valeur est composée de plusieurs éléments ou lorsque vous souhaitez considérer l'unité.

>>> p = style.getProperty('margin')
>>> type(p)
<class 'cssutils.css.property.Property'>
>>> v = p.propertyValue
>>> type(v)
<class 'cssutils.css.value.PropertyValue'>

La classe cssutils.css.PropertyValue peut gérer individuellement des valeurs constituées de plusieurs éléments.

>>> v.length
4
>>> v[0]
cssutils.css.DimensionValue('0')
>>> v[1]
cssutils.css.DimensionValue('20px')

Chaque élément de la valeur peut être obtenu par une opération de type liste. Cette fois, un objet de la classe cssutils.css.DimensionValue est renvoyé. Cette classe peut gérer des unités telles que «px» et «em».

>>> v[1].value
20
>>> v[1].dimension
'px'
>>> v[1].cssText
'20px'

Il existe d'autres classes telles que cssutils.css.ColorValue et cssutils.css.URIValue, et il semble que l'objet approprié est généré en fonction du format de la valeur.

Résumé

Recommended Posts

Analyse CSS avec cssutils en Python
Réalisez le scraping avec le sélecteur Python et CSS en 1 minute
Exploitez LibreOffice avec Python
Grattage avec chromedriver en python
Gérer les sons en Python
Grattage avec du sélénium en Python
Grattage avec Tor en Python
Tweet avec image en Python
Combiné avec ordinal en Python
Tester avec des nombres aléatoires en Python
GOTO en Python avec Sublime Text 3
Travailler avec LibreOffice en Python: import
Scraping avec Selenium en Python (Basic)
Numer0n avec des objets fabriqués avec Python
Ouvrez UTF-8 avec BOM en Python
Utiliser rospy avec virtualenv dans Python3
Analyser le journal des validations de Subversion en Python
Utiliser Python mis en pyenv avec NeoVim
Heatmap avec dendrogramme en Python + matplotlib
Lire des fichiers en parallèle avec Python
Générer un mot de passe pour le manuel avec python
Analyser le journal de validation Git en Python
Utiliser OpenCV avec Python 3 dans Window
Jusqu'à traiter de python dans Atom
Démarrez avec Python avec Blender
Travailler avec des images DICOM en Python
Écrire de la documentation dans Sphinx avec Python Livereload
Obtenez des données supplémentaires vers LDAP avec python
Livre en spirale en Python! Python avec un livre en spirale! (Chapitre 14 ~)
Essayez de vous connecter à qiita avec Python
Python3> dans le mot clé> Vrai avec une correspondance partielle?
Contrôle exclusif avec fichier de verrouillage en Python
Surveillance des appareils effectuée par Python On-box de IOS-XE
Essayez de travailler avec des données binaires en Python
Dessinez Nozomi Sasaki dans Excel avec python
Conseils pour gérer les binaires en Python
Afficher Python 3 dans le navigateur avec MAMP
Comment utiliser BigQuery en Python
Classe Trump en Python (avec comparaison)
Gérer les "années et mois" en Python
Traiter plusieurs listes avec for en Python
Remplacer non-ASCII par des expressions régulières en Python
Un serveur Web de ligne (avec CGI) en python
Commençons avec TopCoder en Python (version 2020)
Traitez facilement des images en Python avec Pillow
Pour faire fonctionner la station d'horodatage en Python
Appelez APIGateWay avec APIKey dans les requêtes python
Lire des caractères dans des images avec Python OCR
Introduction de sip-4.14 dans l'environnement python3.2.2 avec MacOS 10.7.4
Quadtree en Python --2
Python en optimisation
CURL en Python
FizzBuzz en Python3
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
Grattage avec Python