Почему я не могу разобрать ответ в Scrapy?

#scrapy

#scrapy

Вопрос:

Я новичок в Scrapy и использую его для сбора данных с веб-сайта Lazada. Я получил HTTP-сообщение 200, означающее, что ответ успешно возвращен. Но я не могу разобрать ответ, хотя запрос xpath правильный. Кто-нибудь может мне помочь? Спасибо.

Это код:

 import scrapy

class LazadaSpider(scrapy.Spider):
name = 'lazada'
allowed_domains = ['lazada.com.my']
start_urls = ['https://lazada.com.my/catalog/?q=books/']

def parse(self, response):
    all_products = response.xpath('//div[@class="c2prKC"]') 
    print(len(all_products))
  

результат показывает 0 для длины all_products
И результат показан на картинке.

ОБНОВЛЕНИЕ: я пытался получить данные, сохраненные в javascript или используя selenium, чтобы имитировать поведение пользователя при просмотре, однако я получу заблокированную КАПЧУ после попытки очистки в течение одного раза, а затем мне нужно подождать 15 минут, чтобы я мог очистить второй раз. Кто-нибудь может мне помочь?

капча, с которой я столкнулся после очистки lazada в течение одного раза

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

1. docs.scrapy.org/en/latest/topics/dynamic-content.html

Ответ №1:

Вы можете попробовать получить доступ к Интернету через оболочку scrapy в терминале, чтобы перехватить ответ, после чего вы можете использовать представление (ответ), чтобы открыть браузер и настроить свой xpath или css селектор

 scrapy shell https://lazada.com.my/catalog/?q=books/  # Access the web through scrapy
view(response)                                        # View cached web on browser

  

Обновить :
Кажется, lazada использует динамический контент для загрузки элемента (элемент загружается и отображается с использованием javascript после загрузки страницы), это означает, что вам понадобится другой модуль для обхода веб-страниц, попробуйте использовать selenium, scrapy-splash или requests-html.

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

1. Спасибо за ваш ответ. Действительно ценю это и попробую позже.

2. Я пробовал response.css («div#root div.ant-row div.ant-row div»), но он по-прежнему выдает null, правильный ли css?

3. элементы ini lazada отображаются с использованием javascript после загрузки страницы, вы можете проверить это, распечатав текст ответа из scrapy. Для обхода такого веб-сайта вам понадобится другой модуль для отображения javascript, вы можете попробовать использовать selenium, requests-html или scrapy splash, или вы можете просмотреть страницу в браузере и попытаться получить запрос xhr с самой страницы, чтобы получить источник данных, если он существует

4. во-первых, спасибо за ваши комментарии. Я пробовал selenium, но каким-то образом я буду заблокирован CAPTCHA после нескольких попыток…

5. Текст загружается из JSON из запроса GET.

Ответ №2:

Элемент загружается и отображается с использованием javascript после загрузки страницы.

показанный элемент из view-source

показанный элемент из консоли

Как получить элемент из ответа?

 data_str = response.css('script')[3].re_first('window.pageData=({. })')
  

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

1. во-первых, большое спасибо за комментарии, я уже пробовал это раньше, однако, это работает только в первый раз, затем я буду заблокирован КАПЧЕЙ, вы можете мне помочь? Я все еще застрял с прошлой недели.

2. что за капча?

3. страница содержала ползунок

4. я не могу найти никаких статей, в которых рассказывается об обходе инструментов защиты от очистки в lazada

5. Вот одна статья, чтобы обойти слайд-капчу: medium.com/the-innovation /…