оболочка scrapy отличается от пользовательского интерфейса, часть веб-сайта не подлежит удалению

#python #beautifulsoup #scrapy #web-crawler #scrapy-shell

#python #beautifulsoup #scrapy #веб-сканер #scrapy-shell

Вопрос:

Проблема в том, что я не могу очистить часть веб-сайта. Если я использую Chrome devmode, я не могу скопировать правильную позицию ни в xpath, ни в селекторе.

Я бы получил правильный путь для других вкладок или разделов, например, для заголовка тела: body > div.header.home-header > div

в то время как, когда я пытаюсь получить вкладку с нужной мне информацией, я получил только: #htmlContent . Если я напишу это вручную, это должно быть: body > div.main.main-top.seach-boxstyle > div > div > div.recommend-product-wrap.produc-text > div > div.recommend-product , но это вернуло пустой список.

Я думаю о том, что если кто-то процитирует весь сеанс, чтобы я не мог очистить, или это другая проблема. URL-адрес на китайском языке, хотя:http://www.usewealth.com/Product/More.aspx?productDisplay=isArticle

Я пытаюсь помочь компании создать свой собственный список рекомендуемых обменов, тогда как список никак не отображается.

Ответ №1:

Проблема в том, что страница динамически отображает свое содержимое с помощью JavaScript. Сам Scrapy не запускает JavaScript, он загружает только исходный код HTML страницы, поэтому динамического содержимого там нет. В основном есть два варианта, что делать в таком случае. Либо отобразите страницу с помощью какого-либо браузера без головы (например, Selenium или Splash), и пусть Scrapy проанализирует полученный результат. Исходя из моего опыта, я бы рекомендовал использовать Splash, потому что он более надежный, а интеграция с Scrapy осуществляется без проблем с использованием библиотеки scrapy-splash.

Другой вариант — использовать инструменты разработчика браузера, чтобы посмотреть, не использует ли страница API для получения данных (которые JavaScript затем отображает на странице). Похоже, это относится к веб-сайту, который вы пытаетесь очистить. Просматривая инструменты разработчика Chrome (вкладка «Сеть», а затем запросы XHR), я вижу запросы POST на этот URL:

 http://www.usewealth.com/Action/ProductAJAX.ashx
  

Он возвращает ответ JSON, который, по-видимому, содержит все необходимые данные и который вы можете проанализировать с помощью стандартной json библиотеки.

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

1. Привет, но пока я использую post, я смог вернуть только статус 200

2. Я не понимаю, в чем проблема со статусом 200? Не могли бы вы немного уточнить?

3. Как я могу запросить содержимое внутри ashx, то есть ответ json. Я все еще не совсем понимаю, спасибо за ответ

4.Вы определяете start_requests метод в своем spider и внутри метода, вы yield scrapy.Request с помощью метода POST и параметров, которые вы выводите из инструментов разработчика браузера. Есть много вопросов / ответов SO, которые охватывают это.