[PYTHON] 치료 및 응답 상태 코드 : 어떻게 검사 할 것인가?
PYTHON치료 및 응답 상태 코드 : 어떻게 검사 할 것인가?
나는 404, 302 및 200 페이지를 확인하기 위해 내 사이트 맵을 크롤링하기 위해 치료를 사용하고 있습니다. 그러나 나는 응답 코드를 얻을 수 없을 것 같습니다. 지금까지 내 코드는 다음과 같습니다.
from scrapy.contrib.spiders import SitemapSpider
class TothegoSitemapHomesSpider(SitemapSpider):
name ='tothego_homes_spider'
## robe che ci servono per tothego ##
sitemap_urls = []
ok_log_file = '/opt/Workspace/myapp/crawler/valid_output/ok_homes'
bad_log_file = '/opt/Workspace/myapp/crawler/bad_homes'
fourohfour = '/opt/Workspace/myapp/crawler/404/404_homes'
def __init__(self, **kwargs):
SitemapSpider.__init__(self)
if len(kwargs) > 1:
if 'domain' in kwargs:
self.sitemap_urls = ['http://url_to_sitemap%s/sitemap.xml' % kwargs['domain']]
if 'country' in kwargs:
self.ok_log_file += "_%s.txt" % kwargs['country']
self.bad_log_file += "_%s.txt" % kwargs['country']
self.fourohfour += "_%s.txt" % kwargs['country']
else:
print "USAGE: scrapy [crawler_name] -a country=[country] -a domain=[domain] \nWith [crawler_name]:\n- tothego_homes_spider\n- tothego_cars_spider\n- tothego_jobs_spider\n"
exit(1)
def parse(self, response):
try:
if response.status == 404:
## 404 tracciate anche separatamente
self.append(self.bad_log_file, response.url)
self.append(self.fourohfour, response.url)
elif response.status == 200:
## printa su ok_log_file
self.append(self.ok_log_file, response.url)
else:
self.append(self.bad_log_file, response.url)
except Exception, e:
self.log('[eccezione] : %s' % e)
pass
def append(self, file, string):
file = open(file, 'a')
file.write(string+"\n")
file.close()
scrapy의 문서에서 response.status 매개 변수는 응답의 상태 코드에 해당하는 정수입니다. 지금까지는 200 개의 상태 URL 만 기록했지만 302는 출력 파일에 기록되지 않았습니다 (그러나 crawl.log에서 리디렉션을 볼 수 있음). 302 요청을 "트랩"하고 해당 URL을 저장하려면 어떻게해야합니까?
해결법
-
==============================
1.http://readthedocs.org/docs/scrapy/en/latest/topics/spider-middleware.html#module-scrapy.contrib.spidermiddleware.httperror
http://readthedocs.org/docs/scrapy/en/latest/topics/spider-middleware.html#module-scrapy.contrib.spidermiddleware.httperror
기본 스파이더 미들웨어가 활성화되었다고 가정하면 200-300 범위를 벗어난 응답 코드는 HttpErrorMiddleware에 의해 필터링됩니다. 스파이더에서 handle_httpstatus_list 속성을 설정하여 404를 처리하려는 미들웨어를 말할 수 있습니다.
class TothegoSitemapHomesSpider(SitemapSpider): handle_httpstatus_list = [404]
-
==============================
2.여기에 완전한 응답을하려면 :
여기에 완전한 응답을하려면 :
예를 들면 다음과 같습니다. Request (URL, meta = { 'dont_redirect': True));
from https://stackoverflow.com/questions/9698372/scrapy-and-response-status-code-how-to-check-against-it by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 문자열에서 UTF 이외의 8 개 기호를 모두 삭제하십시오. (0) | 2018.11.15 |
---|---|
[PYTHON] 모든 정규식 일치의 색인을 찾으십니까? (0) | 2018.11.15 |
[PYTHON] 파이썬 3 대 파이썬 2 맵 비헤이비어 (0) | 2018.11.15 |
[PYTHON] 팬더 데이터 프레임을 동적으로 필터링하기 (0) | 2018.11.15 |
[PYTHON] 판다 데이터 프레임에서 선택한 값이 목록에 있는지 확인하는 방법? (0) | 2018.11.15 |