#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, которые охватывают это.