3
votes

Récupérer les données JSON du site e-commerce Ajax avec Python

Auparavant, j'avais publié une question sur la manière d'obtenir les données d'un site Web AJAX à partir de ce lien: Scraping du site de commerce électronique AJAX à l'aide de python

Je comprends un peu comment obtenir la réponse qui utilise le chrome F12 dans l'onglet Réseau et faire du codage avec python pour afficher les données. Mais je ne trouve presque pas l'URL spécifique de l'API. Les données JSON ne proviennent pas d'une URL comme le site Web précédent, mais elles se trouvent dans l'élément Inspect de Chrome F12.

 entrez la description de l'image ici entrez la description de l'image ici


  1. Ma vraie question est en fait de savoir comment obtenir UNIQUEMENT les données JSON en utilisant BeautifulSoup ou tout ce qui y est lié? Une fois que je ne pourrai obtenir que les données JSON de l'application / id + json, je les convertirai en données JSON que python pourra reconnaître afin que je puisse afficher les produits sous forme de tableau.

  2. Un autre problème est qu'après plusieurs fois que j'exécute le code, les données JSON sont manquantes. Je pense que le site Web bloquera mon adresse IP. Comment résoudre ce problème?


Voici le lien du site Web:

https: // www .lazada.com.my / catalog /? _ keyori = ss & from = input & page = 1 & q = h370m & sort = priceasc

Voici mon code

depuis bs4 importer les demandes d'importation BeautifulSoup

page_link = ' https://www.lazada.com. mon / catalogue /? _ keyori = ss & from = input & page = 1 & q = h370m & sort = priceasc '

page_response = requests.get (page_link, timeout = 5)

page_content = BeautifulSoup (page_response.content, "html.parser")

print (page_content)


0 commentaires

3 Réponses :


1
votes

Essayez :

import requests

response = requests.get(url)
data = response.json()


1 commentaires

Je suis désolé mais je comprends à peine votre solution. Pouvez-vous m'aider sur le code?



1
votes

Vous devrez analyser manuellement les données HTML de votre Soupe car d'autres sites Web restreindront leur API json à d'autres parties.

Vous pouvez trouver plus de détails ici dans la documentation: https://www.crummy.com/software/BeautifulSoup/bs4/doc/ < / a>


0 commentaires

2
votes

Vous pouvez simplement utiliser la méthode find avec le pointeur vers votre balise avec l'attr type = application / json

Ensuite, vous pouvez utiliser le package json pour charger la valeur dans un dict

Voici un exemple de code:

from bs4 import BeautifulSoup as soup
import requests
import json

page_link = 'https://www.lazada.com.my/catalog/?_keyori=ss&from=input&page=1&q=h370m&sort=priceasc'
page_response = requests.get(page_link, timeout=5)
page_content = soup(page_response.text, "html.parser")

json_tags = page_content.find_all('script',{'type':'application/ld+json'})
for jtag in json_tags:
    json_text = jtag.get_text()
    json_dict = json.loads(json_text)
    print(json_dict)

EDIT: Mon mauvais, je ne vous ai pas vu rechercher type = application / ld + json attr Comme il semble avoir plusieurs avec cet attr, vous pouvez simplement utiliser la méthode find_all :

from bs4 import BeautifulSoup as soup
import requests
import json

page_link = 'https://www.lazada.com.my/catalog/?_keyori=ss&from=input&page=1&q=h370m&sort=priceasc'
page_response = requests.get(page_link, timeout=5)
page_content = soup(page_response.text, "html.parser")

json_tag = page_content.find('script',{'type':'application/json'})
json_text = json_tag.get_text()
json_dict = json.loads(json_text)
print(json_dict)

p >


4 commentaires

Merci pour le code. Ça marche. Mais après 3 fois l'exécution du même code, cela ne fonctionnera plus. Cela signifie-t-il que le site Web bloque mon adresse IP?


Comment éviter le blocage IP? Utilisez du sélénium?


Je ne sais pas s'il s'agit d'un blocage IP et je ne sais pas comment l'empêcher


C'est bon monsieur. Merci quand même