Как я могу очистить данные продукта Ali express - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь очистить данные продукта Али express на странице продукта с помощью Python и BeautifulSoup.

Я запускаю следующий код, ссылающийся на файл YML ( ali express .yml) с селекторами Али express CSS, созданными с помощью SelectorLib:

from selectorlib import Extractor
import requests
import json
import argparse

argparser = argparse.ArgumentParser()
argparser.add_argument('url', help='Amazon Product Details URL')
# Create an Extractor by reading from the YAML file
e = Extractor.from_yaml_file('./aliexpress.yml')

user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246'
headers = {'User-Agent': user_agent}
# Download the page using requests
args = argparser.parse_args()
r = requests.get(args.url, headers=headers)
# Pass the HTML of the page and create
data = e.extract(r.text)
# Print the data
print(json.dumps(data, indent=True))

Я получаю следующий ответ:

{
 "name": null,
 "price": null,
 "image": null
}

У меня есть другие файлы YML для Amazon и другая электронная коммерция работает нормально, но с Али express возвращает ноль. Странно, потому что в SelectorLib я могу правильно просматривать данные предварительного просмотра, поэтому файл YML правильный.

Может ли Али express блокировать мой просмотр? Как я могу очистить данные Али express без нулевого ответа?

1 Ответ

1 голос
/ 22 апреля 2020
  1. Страница загружается через JavaScript, поэтому requests не поможет вам отрендерить JS. вы можете использовать selenium или любые другие модули, которые визуализируют JS.
  2. Я заметил, что ваши нужные данные находятся в теге script, который вы можете loads в пределах JSON, а затем parse it.
  3. Причина, по которой вы можете видеть elements в inspect element вашего драйвера, потому что браузер фактически визуализирует его для вас, но если вы проверили page source, вы заметит, что он не находится с ним, если вы отключили JS.

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

import requests
import json
import re

target = ["title", "itemDetailUrl", "imagePath"]


def main(url):
    r = requests.get(url)
    match = re.search(r'data: ({.+})', r.text).group(1)
    data = json.loads(match)
    goal = [data['pageModule'][x] for x in target] + \
        [data['priceModule']['formatedActivityPrice']]
    print(goal)


main("https://es.aliexpress.com/item/32601027783.html")

Выход:

['Nueva versión Xiaomi Mi cargador de coche Dual USB versión de carga rápida 37W Max con puntas de luz LED para iPhone Huawei Xiaomi para Samsung|charger dual|dual usb|mi car - AliExpress', 
'https://es.aliexpress.com/item/32601027783.html', 
'https://ae01.alicdn.com/kf/H6f0b93e98bb646d5a1183161b65707e3P/Nueva-versi-n-Xiaomi-Mi-cargador-de-coche-Dual-USB-versi-n-de-carga-r-pida.jpg', 
'€ 9,31 - 10,86']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...