Próbuję pełzać dane, jednak kod rzuca błąd z json.loads. Kiedy prześledziłem z powrotem do błędu, zdałem sobie sprawę, że element w pętli jest None, więc json.loads nie może uruchomić.

Czy jest jakieś rozwiązanie?

Poniżej znajduje się mój kod:

import json
from selenium import webdriver
import pandas as pd
from bs4 import BeautifulSoup
from datetime import datetime

start_time = datetime.now()


data = []
 
op = webdriver.ChromeOptions()
op.add_argument('--ignore-certificate-errors')
op.add_argument('--incognito')
op.add_argument('--headless')
driver = webdriver.Chrome(executable_path='D:/Desktop/Query/chromedriver.exe',options=op)
driver.get('https://www.cdiscount.com/f-1175520-MIS2008813786478.html')
link = 'https://www.cdiscount.com/f-1175520-MIS2008813786478.html'
soup = BeautifulSoup(driver.page_source, 'html.parser')
b = soup.prettify()
product_title = soup.find('title').getText()
reviews = soup.find_all("script",type="application/ld+json")
for element in reviews : 
     json_string = element.getText()
     json_dict = json.loads(json_string)
     data.append(json_dict)
1
mht 22 listopad 2020, 01:41

1 odpowiedź

Najlepsza odpowiedź

Możesz spróbować przeczytać JSON, uzyskując dostęp do contents swojego elementu.

for element in reviews: 
     json_string = ' '.join(element.contents)
     json_dict = json.loads(json_string)
     data.append(json_dict)

The BeautifulSoup Dokumentacja O {X0}}:

Jeśli chcesz jedynie czytelny tekst w dokumencie lub znaczniku, możesz użyć metody Get_Text ().

...

Podobnie jak w przypadku pięknej zupy w wersji 4.9.0, gdy LXML lub HTML.PARSER są używane, zawartość, a znaczniki nie są uważane za "tekst", ponieważ te tagi nie są częścią ludzkiej zawartości pag *

To jest powód, dla którego getText w twoim przypadku zwraca pusty łańcuch i contents należy użyć.

0
Maximilian Peters 21 listopad 2020, 23:13