2013-12-02 6 views
0

Я размышляю над методами запроса/ответа Scrapy. Может кто-нибудь объяснить мне, что следующие утверждения (запрос часть) на самом деле делать ?:Что делают эти утверждения?

def get_url(): 
     url = raw_input('Enter the url of your website (including the http)') 
     return url  
    start_urls = str(get_url()) 
    request= Request(start_urls) 
    depth= request.meta['depth'] 

благодаря

+3

какая именно часть вы не понимаете? – alko

+1

Вы видели, как http://doc.scrapy.org/en/latest/topics/spiders.html описывают, как работают start_urls и запросы? – Pippin

+0

Мне просто интересно, как я могу использовать request() в сочетании response(). Я уже проверил документацию, однако мне непонятно, как они работают вместе. –

ответ

1

Когда вы говорите: «Я размышлял над Запрос/методы реагирования на 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 после создания, не имеет значения, какие расширения вы включили; он будет пустым.

+0

Gr8 объяснение – adil

Смежные вопросы