Nano Hash - криптовалюты, майнинг, программирование

Python: парсинг веб-сайта shopify

Я пытаюсь просмотреть множество веб-сайтов, но одним из них является Lime Crime, который поддерживается Shopify (AFAIK). Я использую библиотеку lxml, но когда я попытался использовать xpath для перехода к элементу, я получил пустой массив, но на самом деле он существует на веб-странице.

import requests
from lxml import html
url = "https://limecrime.com/collections/unicorn-hair-full-coverage"
response = requests.get(url)
byte_data = response.content
source_code = html.fromstring(byte_data)

Я пробовал source_code.cssselect("a.CF-Product__ImageWrapper") или source_code.cssselect("CF-Product__ImageWrapper"), но это не сработало. Может ли кто-нибудь помочь мне получить все ссылки на продукты?

28.07.2020

Ответы:


1

Это может быть просто потому, что контент, который вы ищете, загружается на втором этапе с помощью некоторого Javascript, но его нет на html-странице по указанному вами URL-адресу.

С response сделать это невозможно: данных там нет. В качестве альтернативы вы можете заглянуть в headless chrome automation. Библиотеки, которые приходят на ум, puppeteer и версия Python, pyppeteer.

Библиотека безголового браузера позволяет вам, по сути, запустить экземпляр полного браузера, который будет анализировать и загружать каждый ресурс так же, как вы видите на экране, и в конце предоставит вам полный DOM для анализа.

28.07.2020
  • Спасибо, я проверю и учту это для своего решения. Я ожидал получить что-то без другой библиотеки. Но я понимаю причину. 28.07.2020

  • 2

    Нет, это не так. Вероятно, вы пытаетесь проанализировать элемент, который либо создается в Javascript, либо, по крайней мере, его класс назначен в Javascript.

    lxml не будет запускать код Javascript, он просто проанализирует необработанный HTML-код, загруженный с этого URL-адреса. Вы можете взглянуть на HTML через терминал:

    curl -s "https://limecrime.com/collections/unicorn-hair-full-coverage" | grep "CF-Product__ImageWrapper"
    

    Вы можете видеть, что он возвращает нулевые строки.

    Если вы хотите взглянуть на фактический ответ, вы можете использовать только:

    curl -s "https://limecrime.com/collections/unicorn-hair-full-coverage"

    Это покажет вам, что именно анализируется вашим кодом.

    28.07.2020

    3

    Для получения исходного кода страниц можно использовать запросы и BeautifulSoup

    import requests
    from lxml import html
    from bs4 import BeautifulSoup
    url = "https://limecrime.com/collections/unicorn-hair-full-coverage"
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) 
    Gecko/20100101 Firefox/78.0'}
    s = requests.session()
    s.headers.update(headers)
    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'lxml')
    print (soup)
    
    28.07.2020
  • Привет, да, этот код работает. Но моя проблема связана с загруженным содержимым javascript. Спасибо. 28.07.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..