2017-02-01 7 views
0

У меня этот код доступен из моего предыдущего эксперимента.Какие изменения необходимо сделать для получения кода состояния домена домена с помощью Scrapy?

import scrapy 

class BlogSpider(scrapy.Spider): 
    name = 'blogspider' 
    start_urls = ['http://example.com/'] 

    def parse(self, response): 
     for title in response.css('h2'): 
      yield {'Agent-name': title.css('a ::text').extract_first()} 

     next_page = response.css('li.col-md-3 ln-t > div.cs-team team-grid > figure > a ::attr(href)').extract_first() 
     if next_page: 
      yield scrapy.Request(response.urljoin(next_page), callback=self.parse) 

Я не понять, как изменить этот код, чтобы принимать входной сигнал в виде списка URL из текстового файла (Может быть 200+ доменов) и проверить состояние HTTP доменов и сохранить его в файле. Я пытаюсь это проверить, живут ли домены или нет.
Что я ожидаю иметь выход есть:

example.com,200 
example1.com,300 
example2.com,503 

Я хочу дать файл в качестве вклада в Scrapy сценарий, и он должен дать мне выше выход. Я постарался взглянуть на вопросы: How to detect HTTP response status code and set a proxy accordingly in scrapy? и Scrapy and response status code: how to check against it?
Но не повезло. Следовательно, я собираюсь изменить свой код и сделать это. Как я могу это сделать? Пожалуйста, помогите мне.

+0

Что вы имеете в виду _ "проверить статус HTTP доменов" _? В вашем файле есть URL-адреса, вы имеете в виду _check статус HTTP каждого URL_? По умолчанию scrapy будет подавать только ваши обратные вызовы с ответами HTTP 200. Вы можете посмотреть мета-ключ ['handle_httpstatus_all'] (https://docs.scrapy.org/en/latest/topics/spider-middleware.html#std:reqmeta-handle_httpstatus_all), чтобы получить ответы не-200. –

+0

@paultrmbrth Я просто хочу сохранить код состояния URL-адреса в другом файле с URL-адресом. Если возможно, я оставлю жизнь и уничтожу остальных. Это то, что я пытаюсь сделать. Вы можете мне помочь? Я обязательно прочитаю документ еще раз. Раньше я читал, но мне это не помогло. –

+0

Можете ли вы собрать элементы (URL, статус)? что-то вроде 'yield {" url ": response.url," status ": response.status}' в вашем обратном вызове должно уже дать вам все ответы HTTP-200. –

ответ

0

Для каждого объекта ответа вы можете получить URL-адрес и код состояния thx для свойств объекта ответа. Поэтому для каждой ссылки, на которую вы отправляете запрос, вы можете получить код состояния, используя response.status. Работает ли так, как вы этого хотите?

def parse(self, response): #file choosen to get output (appending mode): file.write(u"%s : %s\n" % (response.url, response.status)) #if response.status in [400, ...]: do smthg for title in response.css('h2'): yield {'Agent-name': title.css('a ::text').extract_first()} next_page = response.css('li.col-md-3 ln-t > div.cs-team team-grid > figure > a ::attr(href)').extract_first() if next_page: yield scrapy.Request(response.urljoin(next_page), callback=self.parse)

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