Scrapy: Следуйте ссылке, чтобы получить дополнительные данные элемента?

У меня нет конкретной проблемы с кодом. Я просто не уверен, как логически подойти к следующей проблеме с помощью Scrapy framework:

Структура данных, которые я хочу очистить, обычно является строкой таблицы для каждого элемента. Достаточно прямо, верно?

В конечном итоге я хочу очистить заголовок , дату и данные для каждой строки. Название и дата оплаты сразу же доступны на странице …

НО сами детали не находятся в таблице, а скорее ссылка на страницу, содержащую детали (если это не имеет смысла, вот таблица):

|-------------------------------------------------| | Title | Due Date | |-------------------------------------------------| | Job Title (Clickable Link) | 1/1/2012 | | Other Job (Link) | 3/2/2012 | |--------------------------------|----------------| 

Боюсь, я до сих пор не знаю, как логично передать предмет с обратными вызовами и запросами даже после прочтения раздела CrawlSpider документации Scrapy.

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

Ответ:

Чтобы очистить дополнительные поля, которые находятся на других страницах, в методе анализа выведите URL-адрес страницы с дополнительной информацией, создайте и верните из этого метода анализа объект запроса с этим URL-адресом и передайте уже извлеченные данные через его meta параметр.

как мне объединить результаты с целевой страницы на текущую страницу в scrapy?

Пример из документации по скрипированию

 def parse_page1(self, response): item = MyItem() item['main_url'] = response.url request = scrapy.Request("http://www.example.com/some_page.html", callback=self.parse_page2) request.meta['item'] = item return request def parse_page2(self, response): item = response.meta['item'] item['other_url'] = response.url return item 

Вы также можете использовать Python functools.partial для передачи item или любых других сериализуемых данных с помощью дополнительных аргументов для следующего обратного вызова Scrapy.

Что-то вроде:

 import functools # Inside your Spider class: def parse(self, response): # ... # Process the first response here, populate item and next_url. # ... callback = functools.partial(self.parse_next, item, someotherarg) return Request(next_url, callback=callback) def parse_next(self, item, someotherarg, response): # ... # Process the second response here. # ... return item 
  • html ссылки не работают (с использованием base href)
  • Связывание значения столбца в jqGrid с новой страницей с помощью GET
  • Использование jQuery для программного перехода по ссылке
  • Как сохранить: активный стиль css после нажатия элемента
  • Откройте внешние ссылки в браузере с веб-браузером Android
  • Что такое синтаксис RTF для гиперссылки?
  • Пример использования гиперссылки в WPF
  • Как сделать кнопку похожим на ссылку?
  • Interesting Posts

    Oracle JDBC: неверное имя пользователя / пароль (ora-01017)

    Как мне получить завершение aws cli для работы с zsh на ubuntu?

    Как Terminal.app обнаруживает изменение параметров терминала?

    Microsoft Word внезапно не сохранит файлы; «Слово не может создать рабочий файл – проверьте переменную среды temp»

    Bash расширяет переменную переменной

    Угловой 2 пользовательских ввода формы

    Угловое 2: Как обнаружить изменения в массиве? (свойство @input)

    Развертывание проекта Maven throws java.util.zip.ZipException: недопустимый заголовок LOC (плохая подпись)

    Все библиотеки com.android.support должны использовать ту же самую версию

    Как обрабатывать уведомление, когда приложение находится в фоновом режиме в Firebase

    не удалось запустить локальный сервер mongodb

    Любой способ запуска программного обеспечения Mac OSX под Windows?

    Автоматизировать обслуживание системы

    Установить альфа / непрозрачность макета

    Проверка с помощью Validating event и ErrorProvider – Показать сводку ошибок

    Давайте будем гением компьютера.