CSS-Analyse mit cssutils in Python

Ein Hinweis, wenn Sie eine Website in Python scrappen und das CSS analysieren müssen, das inline im Attribut "style" des Tags geschrieben wurde.

Bibliotheksauswahl

Beautiful Soup scheint nicht in der Lage zu sein, mit CSS umzugehen. Suchen Sie daher nach einer Bibliothek, die Ihren Anforderungen entspricht.

Ich habe mit PyPI gesucht und mich für cssutils entschieden, das oben angezeigt wird. Dokumentation ist richtig geschrieben und es scheint, dass die Entwicklung fortgesetzt wird, also sieht es gut aus.

Diesmal habe ich es in der Umgebung von Python 3.3.3 versucht. Die Installation ist ein Schuss mit "pip".

$ python -V
Python 3.3.3
$ pip install cssutils

CSS-Perspektive

Dieses Mal werden wir Inline-CSS analysieren, also werden wir "cssutils.parseStyle" verwenden. Es gibt verschiedene Schnittstellen zum Parsen, und obwohl ich es diesmal nicht ausprobiert habe, können Sie es anscheinend auch analysieren, indem Sie den Dateinamen und die URL angeben. Sie können den Zeichencode auch mit einem optionalen Argument angeben.

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

Das Parsen von Inline-CSS ergibt ein Objekt der Klasse "cssutils.css.CSSStyleDeclaration". Was wir diesmal tun möchten, ist, die Werte, die durch die Eigenschaften "width" und "margin" angegeben sind, von hier abzurufen.

Eigenschaften und Werte abrufen

Es ist einfach, den Wert einer Eigenschaft als Zeichenfolge abzurufen.

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

Verwenden Sie die Objekte der Klassen cssutils.css.Property und cssutils.css.PropertyValue, wenn Sie etwas detaillierter analysieren möchten, z. B. wenn der Wert aus mehreren Elementen besteht oder wenn Sie die Einheit berücksichtigen möchten.

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

Die Klasse "cssutils.css.PropertyValue" kann Werte, die aus mehreren Elementen bestehen, einzeln verarbeiten.

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

Jedes Element des Wertes kann durch eine listenartige Operation erhalten werden. Dieses Mal wird ein Objekt der Klasse cssutils.css.DimensionValue zurückgegeben. Diese Klasse kann Einheiten wie "px" und "em" verarbeiten.

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

Es gibt andere Klassen wie "cssutils.css.ColorValue" und "cssutils.css.URIValue", und es scheint, dass das entsprechende Objekt abhängig vom Wertformat generiert wird.

Zusammenfassung

Recommended Posts

CSS-Analyse mit cssutils in Python
Erreichen Sie das Scraping mit Python & CSS Selector in 1 Minute
Betreiben Sie LibreOffice mit Python
Schaben mit Chromedriver in Python
Umgang mit Sounds in Python
Scraping mit Selen in Python
Scraping mit Tor in Python
Tweet mit Bild in Python
Kombiniert mit Ordnungszahl in Python
Testen mit Zufallszahlen in Python
GOTO in Python mit erhabenem Text 3
Arbeiten mit LibreOffice in Python: Importieren
Scraping mit Selen in Python (Basic)
Numer0n mit Elementen, die mit Python erstellt wurden
Öffnen Sie UTF-8 mit Stückliste in Python
Verwenden Sie rospy mit virtualenv in Python3
Analysieren Sie das Subversion-Commit-Protokoll in Python
Verwenden Sie Python in pyenv mit NeoVim
Heatmap mit Dendrogramm in Python + Matplotlib
Lesen Sie Dateien parallel zu Python
Passwort für Lehrbuch mit Python generieren
Analysieren Sie das Git-Commit-Protokoll in Python
Verwenden Sie OpenCV mit Python 3 in Window
Bis zum Umgang mit Python in Atom
Beginnen Sie mit Python mit Blender
Arbeiten mit DICOM-Bildern in Python
Holen Sie sich mit Python zusätzliche Daten zu LDAP
Spiralbuch in Python! Python mit einem Spiralbuch! (Kapitel 14 ~)
Versuchen Sie, sich mit Python bei qiita anzumelden
Python3> im Schlüsselwort> Wahr mit teilweiser Übereinstimmung?
Exklusive Steuerung mit Sperrdatei in Python
Geräteüberwachung durch On-Box Python von IOS-XE
Versuchen Sie, mit Binärdaten in Python zu arbeiten
Zeichnen Sie Nozomi Sasaki in Excel mit Python
Tipps zum Umgang mit Binärdateien in Python
Zeigen Sie Python 3 im Browser mit MAMP an
So arbeiten Sie mit BigQuery in Python
Trump-Klasse in Python (mit Vergleich)
Umgang mit "Jahren und Monaten" in Python
Verarbeiten Sie mehrere Listen mit for in Python
Ersetzen Sie Nicht-ASCII durch reguläre Ausdrücke in Python
Einzeiler webServer (mit CGI) in Python
Beginnen wir mit TopCoder in Python (Version 2020)
Verarbeiten Sie Bilder in Python ganz einfach mit Pillow
So betreiben Sie die Zeitstempelstation in Python
Rufen Sie APIGateWay mit APIKey in Python-Anforderungen auf
Lesen von Zeichen in Bildern mit Python OCR
Einführung von sip-4.14 in der Python3.2.2-Umgebung mit MacOS 10.7.4
Quadtree in Python --2
Python in der Optimierung
CURL in Python
FizzBuzz in Python3
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Scraping mit Python