Очистка сайта электронной коммерции AJAX с использованием Python - PullRequest
0 голосов
/ 28 января 2019

У меня проблема с очисткой сайта электронной коммерции с использованием BeautifulSoup.Я немного погуглил, но все еще не могу решить проблему.

См. Фотографии:

1 Хром F12 : enter image description here

2 Результат : enter image description here

Вот сайт, который я пытался очистить : "https://shopee.com.my/search?keyword=h370m"

Проблема:

  1. Когда я пытался открыть Inspect Element в Google Chrome (F12), я вижу название продукта, цену и т. Д. Но когда яЗапустив программу Python, я не смог получить тот же код и тег в результате Python. После некоторого поиска в Google, я обнаружил, что этот сайт использовал AJAX-запрос для получения данных .

  2. Кто-нибудь может помочь мне с лучшими способами получить данные об этом продукте путем очистки сайта AJAX ? Я бы хотел отобразить данные в виде таблицы .

Мой код:

import requests
from bs4 import BeautifulSoup
source = requests.get('https://shopee.com.my/search?keyword=h370m')
soup = BeautifulSoup(source.text, 'html.parser')
print(soup)

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Добро пожаловать в StackOverflow!:)

В качестве альтернативы вы можете проверить Селен

См. Пример использования из документации:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.close()

Когда вы используете requests (или библиотеки типа Scrapy) обычно JavaScript не загружен.Как отметил @dmitrybelyakov, вы можете отвечать на эти звонки или имитировать обычное взаимодействие с пользователем с помощью Selenium.

0 голосов
/ 28 января 2019

Добро пожаловать в StackOverflow!Вы можете проверить, куда отправляется запрос ajax, и скопировать его.

В этом случае запрос отправляется на этот API-адрес .Затем вы можете использовать requests для выполнения аналогичного запроса.Однако обратите внимание, что для этой конечной точки API требуется правильный заголовок UserAgent.Вы можете использовать пакет типа fake-useragent или просто жестко закодировать строку для агента.

import requests

# fake useragent
from fake_useragent import UserAgent
user_agent = UserAgent().chrome

# or hardcode
user_agent = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36'

url = 'https://shopee.com.my/api/v2/search_items/?by=relevancy&keyword=h370m&limit=50&newest=0&order=desc&page_type=search'
resp = requests.get(url, headers={
    'User-Agent': user_agent
})
data = resp.json()
products = data.get('items')
...