Очистка данных JSON с сайта электронной коммерции Ajax с помощью Python - PullRequest
0 голосов
/ 20 февраля 2019

Ранее я отправил вопрос о том, как получить данные с веб-сайта AJAX по этой ссылке: Очистка сайта электронной коммерции AJAX с использованием python

Я немного понимаюо том, как получить ответ, который использует chrome F12 во вкладке Network и выполнить некоторое кодирование с python для отображения данных.Но я едва могу найти конкретный URL-адрес API для него.Данные JSON не поступают с URL-адреса, как на предыдущем веб-сайте, но они содержатся в элементе проверки в Chrome F12.

enter image description here enter image description here


  1. Мой реальный вопрос на самом деле: как мне получить ТОЛЬКО данные JSON , используя BeautifulSoup или что-нибудь связанное с этим?После того, как я смогу получить только данные JSON из приложения / id + json, я преобразую их в данные JSON, которые Python может распознать, чтобы я мог отобразить продукты в виде таблицы.

  2. Еще одна проблема - через несколько раз после запуска кода данные JSON отсутствуют.Я думаю, что сайт заблокирует мой IP-адрес.Как решить эту проблему?


Вот ссылка на сайт:

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

Вот мой код

из bs4 import Запросы на импорт BeautifulSoup

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

page_response = запросы.get (page_link, timeout = 5)

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

print (page_content)

Ответы [ 3 ]

0 голосов
/ 20 февраля 2019

Вам придется анализировать данные из HTML вручную с вашего Soup, поскольку другие веб-сайты будут ограничивать их json API от других сторон.

Более подробную информацию можно найти здесь в документации: https://www.crummy.com/software/BeautifulSoup/bs4/doc/

0 голосов
/ 20 февраля 2019

Вы можете просто использовать метод find с указателем на ваш тег <script> с атрибутом attr type=application/json

Затем вы можете использовать пакет json для загрузки значения внутри dict

Вот пример кода:

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)

РЕДАКТИРОВАТЬ: Мой плохой, я не видел, что вы ищете type=application/ld+json attr Как кажется, есть несколько <script> с помощью этого атрибута вы можете просто использовать метод 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_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)
0 голосов
/ 20 февраля 2019

почему не использовать эти запросы на импорт

response = запросы.get (...) data = response.json ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...