Estoy luchando para analizar algunos var en mi HTML
Aquí está el ejemplo de HTML:
<script type="text/javascript"> var ASPath = "\/modules\/pm_advancedsearch4\/"; var ASSearchUrl = "https:\/\/golf-land.fr\/module\/pm_advancedsearch4\/advancedsearch4"; var as4_orderBySalesAsc = "Meilleures ventes en dernier"; var as4_orderBySalesDesc = "Meilleures ventes en premier"; var controller = "my-account"; </script>He intentado hacer esto:
soup = BeautifulSoup(s.text, 'html5lib') soup = BeautifulSoup(str(soup.find_all('script')[2]), "html.parser") pattern = re.compile(r"var controller = '(.*?)';$", re.MULTILINE | re.DOTALL) print(pattern) script = soup.find("script", text=pattern) print(pattern.search(script.text).group(1))Mi objetivo era obtener "mi cuenta", pero todo lo que obtuve fue
re.compile("var controller = '(.*?)';$", re.MULTILINE|re.DOTALL) Traceback (most recent call last): File "main.py", line 47, in <module> print(pattern.search(script.text).group(1)) AttributeError: 'NoneType' object has no attribute 'text'La línea 47 se refiere a la última línea de mi código.
Está confuso en cuanto a lo que es usar bs4 para obtener etiquetas específicas y analizar una subcadena de ese contenido.
El patrón que está buscando busca una coincidencia exacta, mientras que lo que quiere es encontrar ese contenido que contiene la subcadena (para obtener la etiqueta específica).
Entonces, su patrón de expresión regular debe ser pattern = re.compile(r"var controller = (.*?);$", re.MULTILINE | re.DOTALL) para obtener esa etiqueta <script> como un objeto BeautifulSoup.
Además, su patrón busca comillas simples ' cuando no hay ninguna en "my-account" .
Pero realmente lo que desea es extraer esa subcadena después de obtener la etiqueta específica.
Prueba esto:
from bs4 import BeautifulSoup import re soup = BeautifulSoup(s.text, 'html5lib') script = soup.find_all('script')[2] pattern = re.compile(r"var controller = (.*?);$", re.MULTILINE | re.DOTALL) #print(pattern) scriptParse = re.search(pattern, str(script)) print(scriptParse.groups(1)[0])Producción:
"my-account"