Питон 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")]')
Я не вижу теги с классом "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.
Я пытаюсь закрыть javascript и открыть его. Сайт зависнет.
Я могу найти атрибут ng-repeat (response.xpath('//div[@ng-repeat]')) или ng-bind (response.xpath('//div[@ng-bind]')), но не ng-scope (response.xpath('//div[@ng-scope]'))
Сайт завис, потому что не может работать без JavaScript. Насколько я знаю, Scrapy не использует Selenium (вам нужно будет создать проект и добавить некоторый код с помощью Selenium), поэтому он не может получить данные, созданные с помощью JavaScript.
Спасибо за ваше предложение, насколько я знаю, в некоторых ситуациях используется Selenium, потому что имитируется прослушиватель кликов на веб-сайте, но мой URL-адрес просто открывает его и собирает данные. Если я использую Selenium, для чего будет работать? Я что-то пропустил?
Спасибо за помощь, я обнаружил, что могу получить данные из их запроса ajax.






Здесь есть все, что вам нужно
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
Я вижу
ng, и это может означать, что эта страница использует JavaScript для загрузки данных. Откройте браузер, отключите JavaScript и загрузите свою страницу в браузере, чтобы увидеть, что может видетьScrapy.