Scrapy: Следуйте ссылке, чтобы получить дополнительные данные элемента?
У меня нет конкретной проблемы с кодом. Я просто не уверен, как логически подойти к следующей проблеме с помощью Scrapy framework:
Структура данных, которые я хочу очистить, обычно является строкой таблицы для каждого элемента. Достаточно прямо, верно?
В конечном итоге я хочу очистить заголовок , дату и данные для каждой строки. Название и дата оплаты сразу же доступны на странице …
- C # regex pattern для извлечения URL-адресов из заданной строки - не полный URL-адрес html, но также и ссылки
- jQuery отключить ссылку
- Редактирование гиперссылок и якорей в PDF с помощью ITextSharp
- Изменить цвет текста в тексте TextView и щелкнуть?
- Как ссылаться на метод в javadoc?
НО сами детали не находятся в таблице, а скорее ссылка на страницу, содержащую детали (если это не имеет смысла, вот таблица):
|-------------------------------------------------| | Title | Due Date | |-------------------------------------------------| | Job Title (Clickable Link) | 1/1/2012 | | Other Job (Link) | 3/2/2012 | |--------------------------------|----------------|
Боюсь, я до сих пор не знаю, как логично передать предмет с обратными вызовами и запросами даже после прочтения раздела CrawlSpider документации Scrapy.
- Как создать ссылки в текстовом клиенте?
- Как я могу сделать ссылку на клики в NSAttributedString?
- Удалить упорное подчеркивание ссылки
- Как создать прямую ссылку на любую коробку fancybox
- Facebook share link - можете ли вы настроить текст сообщения?
- Как добавить гиперссылку в JLabel
- Найти имя пакета для приложений Android, чтобы использовать Intent для запуска приложения Market из Интернета
- Может ли Google Chrome открывать локальные ссылки?
Пожалуйста, сначала прочитайте документы, чтобы понять, что я говорю.
Ответ:
Чтобы очистить дополнительные поля, которые находятся на других страницах, в методе анализа выведите 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