Wpis z mikrobloga

Mirki spod tagów #programista15k oraz #programowanie oraz #python mam zagwozdkę od dwóch dni. Ogólnie to frontend here, ale potrzebuję coś zrobić w pythonie i nie jestem w stanie dojść do finału. Mianowicie, ma taki kod:

from bs4 import BeautifulSoup import requests

URL = 'jakasstronawww'


headers = {

"User-Agent": 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:75.0) Gecko/20100101 Firefox/75.0'}


page = requests.get(URL, headers=headers)

soup = BeautifulSoup(page.content, 'html.parser')

scripts = soup.find_all('script')[25]

print(scripts)


Co otrzymuję w print? Ano ten tag 'script', który mnie interesuje. Tag, który ma jakieś 1200 linii.
A struktura tegoż wygląda o tak:
  • 28
regex?
albo zakładając że masz tylko jedno storeId na cały skrypt, możesz znaleźć index stringa "storeId" w całym "scripts", i później wziąć wycinek od storeId do następnego przecinka.

Nie wiem czy da się ładniej
@j_bateman: na szybko z findem

storeidkey = "storeId: "
storeid
index = scripts.find(storeidkey)
start
ofstoreidindex = storeidindex + len(storeidkey)
endofstoreidindex = scripts[startofstoreidindex:].find(",")
storeid = scripts[startofstoreidindex: startofstoreidindex + endofstoreidindex]

regexem mi się nie chce
jak masz więcej storeId w tym skrypcie to ubierz to w while loopa

while scripts.find(storeid
key) =!
@dean_corso: to nie zadziała, bo BeautifulSoup jest od HTML DOM, a nie od JavaScriptu.

RegExp to najbardziej chamska opcja i będzie działać dopóki ktoś nie zmieni kodu na stronie (i tu mowa nawet o zamianie pojedynczego cudzysłowu na podwójny czy tego typu bzdurach ( ͡° ͜ʖ ͡°))

Choć jak patrzę na to co zrobił @Lunatik to chyba była by czytelniejsza :P

regexp byłby (taki pythonowy już ładny):
@j_bateman bo to jest obiekt ;) nie pamiętam teraz dokładnie -musisz sprawdzić w dokumentacji - ale żeby wyciągnąć faktyczną wartość z taga (w tym wypadku "script" - czyli obiektu w Pythonie) jest do tego chyba parametr text (lub coś podobnego, musisz sprawdzić).

Więc dostaniesz do script poprzez scripts.text (lub podobnie, na telefonie jestem nie chce mi się sprawdzać, ale powinieneś dać radę po tych wskazówkach ;))