WebHU - Programozási kérdések és válaszok

Hogyan lehet elemezni a ‹pre› címkében lévő adatokat a beautifulsoup segítségével?

amikor megpróbálom lekaparni az adatokat a következő webhelyről

url = https://bedbathandbeyond.ugc.bazaarvoice.com/2009-en_us/1061083288/reviews.djs?format=embeddedhtml&page=4&scrollToTop=true

Ezt a bedbathbeyond webhelyről szereztem, és ha kérést és beautifulsoup-ot használok, nem kapok semmit. Miert van az?

kód:

r = requests.get(url)
soup = BeautifulSoup(r.content,'lxml')
soup.find_all('span', class_ = 'BVRRReviewAbbreviatedText')

a visszatérési érték üres: []

20.04.2018

  • Ez azért van, mert a HTML egy AJAX-híváson belül van, így a BeautifulSoup nem tudja elemezni a tartalmat. 21.04.2018

Válaszok:


1

js2py-t használtam, mivel a materials objektum több kulcsot (BVRRRatingSummarySourceID, BVRRSecondaryRatingSummarySourceID és BVRRSourceID) tartalmaz, és a HTML-t innen kaptam az értékei a regex-szel sokkal nehezebbek lennének, ha minderre szükséged lenne.

from bs4 import BeautifulSoup
import js2py
import requests

r = requests.get('https://bedbathandbeyond.ugc.bazaarvoice.com/2009-en_us/1061083288/reviews.djs?format=embeddedhtml')

pattern = (r'var'
           r'\s+'
           r'materials'
           r'\s*=\s*'
           r'{"BVRRRatingSummarySourceID".*}')

js_materials = re.search(pattern, r.text).group()
obj = js2py.eval_js(js_materials).to_dict()
html = obj['BVRRSourceID']
soup = BeautifulSoup(html, 'lxml')
spans = soup.select('span.BVRRReviewAbbreviatedText')
>>> len(spans)
5

Az alábbi példában csak a BVRRSourceID kulcs alatti HTML-t használtam, de használhatja a teljes HTML-t az értékek összekapcsolásával:

html = ''.join(obj.values())

Ne felejtse el telepíteni a js2py: pip install js2py és pip install lxml fájlokat, ha lxml értelmezőt szeretne használni.

20.04.2018
  • Bár a válasz egyes részeit nem egészen értettem, működött! Nagyon köszönöm! 21.04.2018
  • A reguláris kifejezésekről itt olvashat. 21.04.2018

  • 2

    Használhat szelén webdrivert, hogy megszerezze az Önt érdeklő html tartalmat. Például,

    from selenium import webdriver
    
    
    def get_html(url):
        driver = webdriver.Chrome()
        driver.maximize_window()
        driver.get(url)
    
        time.sleep(5)
        html_content = driver.page_source.strip()
        return html_content
    
    20.04.2018
  • Szia, köszönöm a választ. miután elmentettem az eredményt egy változóba, mondjuk a=get_html(url), majd megpróbáltam a Beautifulsoup segítségével elemezni: soup = Beautifulsoup(a,'lxml'), majd a 'soup.find_all('span', class = ' BVRRReviewText'), továbbra sem tud lekérni semmit. Miert van az? 21.04.2018
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..