Получить пустой массив, когда класс содержит пробелы

Питон 2.7

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

Вот что я пытаюсь:

scrapy shell http://www.wownews.tw/fashion/movie

а потом

response.body

Я вижу данные html на терминале. Но когда я печатаю

response.xpath('//div[@class = "text ng-scope"]')

получить пустой массив, я думал, что это должно работать.

Проблема возникает из-за того, что класс содержит пробелы?

Как это исправить? Любая помощь будет оценена по достоинству.

Я пытаюсь, чтобы команда все еще получала пустой массив

response.xpath('//div[contains(concat(" ", normalize-space(@class), " "), "text ng-scope")]')

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

furas 15.04.2019 05:02

Я не вижу теги с классом "text ng-scope" в HTML. Возможно, вы видите это в JavaScript в response.body. Есть теги с классом "text" (response.xpath('//div[contains(@class, "text")]') ) but not with class "ng-scope" (response.xpath('//div[contains(@class, "ng-scope")]')). Как по мне ng-scope может и не class но attribute.

furas 15.04.2019 05:07

Я пытаюсь закрыть javascript и открыть его. Сайт зависнет.

Morton 15.04.2019 05:09

Я могу найти атрибут ng-repeat (response.xpath('//div[@ng-repeat]')) или ng-bind (response.xpath('//div[@ng-bind]')), но не ng-scope (response.xpath('//div[@ng-scope]'))

furas 15.04.2019 05:10

Сайт завис, потому что не может работать без JavaScript. Насколько я знаю, Scrapy не использует Selenium (вам нужно будет создать проект и добавить некоторый код с помощью Selenium), поэтому он не может получить данные, созданные с помощью JavaScript.

furas 15.04.2019 05:12

Спасибо за ваше предложение, насколько я знаю, в некоторых ситуациях используется Selenium, потому что имитируется прослушиватель кликов на веб-сайте, но мой URL-адрес просто открывает его и собирает данные. Если я использую Selenium, для чего будет работать? Я что-то пропустил?

Morton 15.04.2019 05:20

Спасибо за помощь, я обнаружил, что могу получить данные из их запроса ajax.

Morton 15.04.2019 05:37
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
7
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Здесь есть все, что вам нужно

import json
import scrapy


class ListingSpider(scrapy.Spider):
    name = 'listing'

    start_urls = ['http://api.wownews.tw/f/pages/site/558fd617913b0c11001d003d?category=5590a6a3f0a8bf110060914d&children=true&limit=48&page=1']

    def parse(self, response):
        items = json.loads(response.body)['results']

        for item in items:
            yield item

См. https://medium.com/@yashpokar/очистить-любой-веб-сайт-в-интернете-без-использования-заставки-или-селена-68a6c9733369

Другие вопросы по теме