Я пытаюсь очистить данные, загружаемые после запроса ajax.
Например, первые 30 видео этой страницы YouTube отображаются в формате html, а затем пользователь должен нажать кнопку «загрузить еще», которая запускает ajax и получает больше результатов. https://www.youtube.com/user/testedcom/videos
Я могу получить ссылку ajax, но как лучше всего извлечь оставшиеся данные/разбить на страницы с помощью функций Scrapy?
запустить оболочку:
scrapy shell https://www.youtube.com/user/testedcom/videos
получить URL-адрес для продолжения ajax:
continuation_url = response.xpath('//*[@class="yt-uix-button yt-uix-button-size-default yt-uix-button-default load-more-button yt-uix-load-more browse-items-load-more-button"]/@data-uix-load-more-href').extract()[0]
url = "https://www.youtube.com/user/testedcom/videos" + continuation_url
получить новые данные от вызова ajax:
fetch(url)
... но отсюда я не уверен, что делать с данными. Он не в том же формате, что и исходный ответ от запуска scrapy shell. Кажется, он не совсем загружается как JSON. Я предполагаю, что у scrapy есть что-то специально для этого, но я не могу найти его в документах.
edit Я могу получить html-контент, выполнив:
import json
response_json = json.loads(response.body_as_unicode())
html = response_json['content_html']
но тогда мне пришлось бы использовать регулярные выражения, чтобы вытащить нужные данные из этого юникода, вместо встроенных селекторов xpath, которые намного удобнее.