#python #scrapy #scrapy-shell
#python #scrapy #scrapy-оболочка
Вопрос:
Python 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")]')
Комментарии:
1. Я вижу
ng
, и это может означать, что эта страница использует JavaScript для загрузки данных. Откройте браузер, отключите JavaScript и загрузите свою страницу в браузере, чтобы посмотреть, чтоScrapy
можно увидеть.2. Я не вижу тегов с классом
"text ng-scope"
в HTML. Может быть, вы видите это в JavaScriptresponse.body
. Есть теги с"text" (
ответом класса.xpath(‘//div[содержит (@class, «text»)]’)) but not with class
«ng-scope» (response.xpath('//div[contains(@class, "ng-scope")]')
). Как по мнеng-scope
, может быть, и нетclass
, ноattribute
.3. Я пытаюсь закрыть javascript и открыть его. Веб-сайт застрянет.
4. Веб-сайт застрял, потому что он не может работать без JavaScript. Насколько я знаю
Scrapy
, не используетSelenium
(вам нужно будет создать project и добавить некоторый кодSelenium
), поэтому он не может получить данные, созданные с помощью JavaScript.5. Спасибо за помощь, я обнаружил, что могу получить данные из их запроса ajax.
Ответ №1:
Здесь есть все, что вам нужно
import json
import scrapy
class ListingSpider(scrapy.Spider):
name = 'listing'
start_urls = ['http://api.wownews.tw/f/pages/site/558fd617913b0c11001d003d?category=5590a6a3f0a8bf110060914damp;children=trueamp;limit=48amp;page=1']
def parse(self, response):
items = json.loads(response.body)['results']
for item in items:
yield item
Обратитесь к https://medium.com/@yashpokar/scrape-any-website-in-the-internet-without-using-splash-or-selenium-68a6c9733369