Когда вы говорите: «Я размышлял над Запрос/методы реагирования на Scrapy», я думаю, что вы» немного немного смущен. Request
и Response
являются классами, а не методами.
И, в то время как эти классы, конечно, сделать имеют метод, вы не спрашиваете о каком-либо из них, вы просто спросите об одном из атрибутов данных, meta
.
Или, если вы имели в виду методы в смысле HTTP, ну, Request
по умолчанию GET
, но вы можете указать другой аргумент method=
; что еще нужно знать?
В документации по Request
говорит:
Request
объект представляет собой запрос HTTP, который обычно генерируется в Spider
и выполняемая Downloader
, и, таким образом, генерирующий Response
.
Другими словами, вы обычно не хотите создавать их самостоятельно. Вы даете Spider
список URL-адресов для начала, и он делает Request
для каждого URL-адреса в списке и для каждого дополнительного URL-адреса, который он обнаруживает при очистке.
Возможно, вам может понадобиться посмотреть наRequest
, что соответствует Response
. И иногда вам может понадобиться настроить создание Request
s внутри комплекса Spider
. Но вам редко приходится создавать их вручную.
Между прочим, вы, кажется, путаете себя своим именем. У вас есть переменная с именем start_urls
, но это не список URL-адресов, это единственный URL-адрес. Который, если вы фактически использовали его как start_urls
в обычном режиме, будет рассматриваться как список одиночных символов. Но, к счастью, вы этого не делаете; вы передаете start_urls
как аргумент url
объекту Request
, и, поскольку это, оказывается, всего один URL-адрес, ваши два путаницы отменены, и вы создаете действительный объект Request
.
Вы могли затем кормить эту Request
объект в Downloader
вручную, чтобы получить обратно Response
объект. Но для этого нет веских оснований. Если вы хотите загружать файлы вручную, а не их spidering, просто используйте модуль stdlib urllib2
/urllib.request
или стороннюю библиотеку, специально предназначенную для ручной загрузки, например, requests
, а не библиотеку пауков.
Между тем, depth= request.meta['depth']
просто возвращает KeyError
. Как meta
документы объяснить, это просто словарь, который является пустым для новых Request
с (если вы не передать meta=
аргумент конструктору, который вы не делали), а также:
... обычно населены различными Компоненты Scrapy (расширения, middlewares и т. Д.). Таким образом, данные, содержащиеся в этом тике, зависят от расширений, которые вы включили.
Поскольку вы ничего не сделали с Request
после создания, не имеет значения, какие расширения вы включили; он будет пустым.
какая именно часть вы не понимаете? – alko
Вы видели, как http://doc.scrapy.org/en/latest/topics/spiders.html описывают, как работают start_urls и запросы? – Pippin
Мне просто интересно, как я могу использовать request() в сочетании response(). Я уже проверил документацию, однако мне непонятно, как они работают вместе. –