Как очистить динамический контент с веб-сайта?

#python #dynamic #scrapy

#python #динамический #scrapy

Вопрос:

Итак, я использую scrapy для очистки данных из раздела книг Amazon. Но каким-то образом я узнал, что у него есть некоторые динамические данные. Я хочу знать, как динамические данные могут быть извлечены с веб-сайта. Вот что я пробовал до сих пор:

 import scrapy
from ..items import AmazonsItem

class AmazonSpiderSpider(scrapy.Spider):
    name = 'amazon_spider'
    start_urls = ['https://www.amazon.in/s?k=agatha christie booksamp;crid=3MWRDVZPSKVG0amp;sprefix=agatha,aps,269amp;ref=nb_sb_ss_i_1_6']

    def parse(self, response):
        items =  AmazonsItem()
        products_name = response.css('.s-access-title::attr("data-attribute")').extract()
        for product_name in products_name:
            print(product_name)
        next_page = response.css('li.a-last a::attr(href)').get()
            if next_page is not None:
                next_page = response.urljoin(next_page)
                yield scrapy.Request(next_page, callback=self.parse)
 

Теперь я использовал SelectorGadget для выбора класса, который я должен очистить, но в случае динамического веб-сайта он не работает.

  1. Итак, как мне очистить веб-сайт с динамическим контентом?
  2. в чем именно разница между динамическим и статическим контентом?
  3. Как мне извлечь другую информацию, такую как цена и изображение, с веб-сайта? и как получить определенные классы, например, такие как цена?
  4. как я узнаю, что данные создаются динамически?

Комментарии:

1. Динамические данные вводятся на страницу, вам нужно что-то вроде Selenium, чтобы дождаться загрузки всей страницы, а затем применить ваши xpaths. В качестве альтернативы вы можете «смоделировать» загрузку страницы и самостоятельно выполнять запросы, чтобы получить данные, проанализировать данные и собрать все это вместе.

Ответ №1:

Итак, как мне очистить веб-сайт с динамическим контентом?

есть несколько вариантов:

  1. Используйте Selenium, который позволяет имитировать открытие браузера, позволяя отображать страницу, а затем извлекать исходный код html
  2. Иногда вы можете посмотреть на XHR и посмотреть, можете ли вы извлекать данные напрямую (например, из API)
  3. Иногда данные находятся в <script> тегах исходного кода html. Вы можете выполнить поиск по ним и использовать json.loads() после преобразования текста в формат json

в чем именно разница между динамическим и статическим контентом?

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

Как мне извлечь другую информацию, такую как цена и изображение, с веб-сайта? и как получить определенные классы, например, такие как цена?

Обратитесь к вашему первому вопросу

как я узнаю, что данные создаются динамически?

Вы будете знать, что он создается динамически, если увидите его в исходном коде страницы инструментов разработки, но не в исходном коде html-страницы, который вы сначала запрашиваете. Вы также можете увидеть, генерируются ли данные с помощью дополнительных запросов в инструменте разработки и просмотра Network -> XHR

Наконец

Amazon предлагает API для доступа к данным. Попробуйте также изучить это

Комментарии:

1. Что касается третьего вопроса, который я задаю, так это как мне получить такой класс, потому что класс, который я использую, в этом случае не работает.

2. вы имеете в виду атрибут class в теге html?

3. css(‘.s-access-title::attr(«data-attribute»)’) . Это

Ответ №2:

Если вы хотите загружать динамический контент, вам нужно будет смоделировать веб-браузер. Когда вы делаете HTTP-запрос, вы получите только текст, возвращенный этим запросом, и ничего больше. Чтобы имитировать веб-браузер и взаимодействовать с данными в браузере, используйте пакет selenium для Python:

https://selenium-python.readthedocs.io/

Ответ №3:

Для очистки динамического содержимого (например, JScript) вы можете использовать Srapy Splash. Посмотрите на это: https://www.google.com/amp/s/blog.scrapinghub.com/2015/03/02/handling-javascript-in-scrapy-with-splash?hs_amp=true

Ответ №4:

Итак, как мне очистить веб-сайт с динамическим контентом?

Веб-сайты с динамическим контентом имеют свои собственные API, из которых они извлекают данные. Эти данные даже не исправлены, они будут другими, если вы проверите их через некоторое время. Но это не значит, что вы не можете создать динамичный веб-сайт. Вы можете использовать автоматизированные платформы тестирования, такие как Selenium или Puppeteer.

в чем именно разница между динамическим и статическим контентом?

Как я объяснил это в вашем первом вопросе, статические данные фиксированы и останутся неизменными навсегда, но динамические данные будут периодически обновляться или изменяться асинхронно.

Как мне извлечь другую информацию, такую как цена и изображение, с веб-сайта? и как получить определенные классы, например, такие как цена?

для этого вы можете использовать такие библиотеки, как BeautifulSoup в python и cheerio в Nodejs. Их документы довольно просты для понимания, и я настоятельно рекомендую вам внимательно их прочитать. Вы также можете следовать этому руководству

как я узнаю, что данные создаются динамически?

При перезагрузке страницы откройте вкладку сеть в Chrome dev tools. Вы увидите, что многие API работают над предоставлением соответствующих данных в соответствии со страницей, к которой вы пытаетесь получить доступ. В этом случае веб-сайт является динамичным.