Próbuję tego rozwiązania od Książki kucharskie. Oczekiwany wyjście jest

4243456.

Ale wciąż otrzymuję błąd

Błąd: AttributeError: "NoneType" Obiekt nie ma atrybutu "GROUP"

import re
from bs4 import BeautifulSoup


html = """
 <div class="heading-dom view">
     <script type="application/javascript">
        window.realty = {"user_id":4243456};
        <!--window.agency = < %- JSON.stringify(agency) % >;-->
        <!--window.agency = < %- JSON.stringify({}) % >-->
     </script>
</div>"""

pattern = re.compile(r'\{"user_id"\s*:\s*(\d+)\}')
soup = BeautifulSoup(html, "html.parser")
script = soup.find("script", text=pattern)

print(pattern.search(script.text).group(1))
-1
Masamune 27 październik 2020, 18:15

1 odpowiedź

Najlepsza odpowiedź

Zmienna script nie ma w nim tekstu. Kiedy spróbowałem tego:

print(script.text)

To było wyjście, które mam:

''

Myślę, że starasz się przekonwertować zmienną script z typu danych bs4.element.Tag do str. Aby to zrobić, zmień ostatnią linię do tego:

print(pattern.search(str(script)).group(1))

Wynik:

4243456

Oto pełny kod:

import re
from bs4 import BeautifulSoup


html = """
 <div class="heading-dom view">
     <script type="application/javascript">
        window.realty = {"user_id":4243456};
        <!--window.agency = < %- JSON.stringify(agency) % >;-->
        <!--window.agency = < %- JSON.stringify({}) % >-->
     </script>
</div>"""

pattern = re.compile(r'\{"user_id"\s*:\s*(\d+)\}')
soup = BeautifulSoup(html, "html.parser")
script = soup.find("script", text=pattern)

print(pattern.search(str(script)).group(1))
0
Sushil 27 październik 2020, 15:20