Nano Hash - криптовалюты, майнинг, программирование

Получите результат от callback-запроса scrapy немедленно

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

Моя проблема в том, что у меня есть веб-сайт со структурой (как документ json):

{ 2: { 
       1: 'http://example.com/1.jpg', 
       2: 'http://example.com/2.jpg'
} 
...// bunch of other information
} 

и ссылки связаны, но мне нужна прямая ссылка на эти изображения. Я пытаюсь решить эту задачу как:

urlData = scrapy.Request(url='http://myserver/1.jpg', callback=self.parse_link )

где функция обратного вызова:

 def parse_link( self, response ):
    Hxs = scrapy.selector.HtmlXPathSelector(response)
    Data = LacBacLink()
    link =  Hxs.select("(//img)[1]/@src").extract()
    Data["Link"] = link
    return Data

Я считаю, что это будет работать правильно, если я смогу немедленно получить результат от функции запроса обратного вызова в scrapy.

Я попытался написать код, представленный в документации:

 def parse_page1(self, response):
    return scrapy.Request("http://www.example.com/some_page.html",
                          callback=self.parse_page2)

def parse_page2(self, response):
    # this would log http://www.example.com/some_page.html
    self.logger.info("Visited %s", response.url)

Это не работает для меня. Если вы знаете, как решить эту задачу с помощью этого кода, пожалуйста, дайте мне любую реализацию для лучшего понимания.


  • Что значит у меня не работает? Есть ошибки? Спасибо. 13.07.2015
  • Я имею в виду, что мне нужно вернуть весь объект. Но только примеры, которые я нашел и попробовал, дают мне фрагменты кода. 13.07.2015
  • И я не знаю, как адаптировать их к моим потребностям. 13.07.2015
  • Не уверен, что я понимаю, вы имеете в виду, что хотите использовать что-то вроде response.body?.. 13.07.2015
  • Я имею в виду, что у меня есть url, и я хотел бы получить данные из этого url мгновенно. urllib, urllib и другие подобные библиотеки работают плохо, потому что мне нужно более ~100000 ответов и запросов. Ответ на ваш вопрос: то же самое, что и response.url. 13.07.2015
  • Хорошо спасибо. Поправьте меня, если я ошибаюсь: вы хотите извлечь абсолютные URL-адреса изображений и сохранить их (только URL-адреса)? 13.07.2015
  • Я постараюсь указать свои потребности. object = {2 :{ 1: link1, 2: link2 }, Field1: Data1, Field2: Data2 } . Это пример файла, который мне нужен как раз ссылка1(относительная) -> ссылка1(прямая). object должно быть возвращено из функции parse . 13.07.2015
  • Вы не можете использовать обратный вызов запроса таким образом. Это сканер scrapy, который делает эти обратные вызовы из части механизма scrapy своей архитектуры. Поэтому сканер ожидает, что элемент или запрос будут возвращены/выданы. Пожалуйста, ознакомьтесь с их архитектурой, если вы хотите большего понимания. У вас есть только два варианта: сделать еще один запрос (urllib, библиотека запросов и т. д., а не scrapy.Request) из функции parse_page1. Я не рекомендую это все же. Мой ответ ниже имеет более грубый стиль. 15.07.2015

Ответы:


1

Это не рабочий код — прочитайте комментарии, которые я добавил.

def parse_page1(self, response):
    # here you would collect all the information that you need from the first page and put it in an item
    r = scrapy.Request("http://www.example.com/some_page.html",
                          callback=self.parse_page2)
    r.meta['item'] = item
    yield r

def parse_page2(self, response):
    item = response.meta['item']
    # add what you need from this response to the item
    yield item # if you need to parse more pages yield a request instead.
14.07.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..