Makeshiftshelter01 / Mater

0 stars 1 forks source link

다량 크롤링시 접속해제 에러 (ConnectionResetError) #7

Open ul8ksgdmy opened 5 years ago

ul8ksgdmy commented 5 years ago

문제 : 현재까지 일베에서 1만 건 이상의 크롤링 시도를 하면 100% 문제가 발생.

해결책 구상 lower page 부분에 아래와 같은 코드 구성

발생 시점은 연결하는 시점이 아니라 하단코드 전체를 도는 중 일어남. 그렇다면 try 검사를 제외한 자료를 수집하는 코드 전체. except 1 검사항목을 True로 만들어 에러 발생을 알려줌 except 2 검사항목을 True로 만들어 에러 발생을 알려줌 else 필요한가? finally 만약 재접속이면, ini 파일에 등록된 하단 페이지의 범위만큼 항목을 an error happened로 채우고 다음 루프로 넘어감.

ul8ksgdmy commented 5 years ago

에러 또 발생... ConnectionError로 처리하는 게 맞는지...

크롤링 진행사항 : 1378 / 13198 크롤링 진행사항 : 1379 / 13198 Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/urllib3/response.py", line 360, in _error_catcher yield File "/usr/lib/python3.6/site-packages/urllib3/response.py", line 669, in read_chunked chunk = self._handle_chunk(amt) File "/usr/lib/python3.6/site-packages/urllib3/response.py", line 615, in _handle_chunk value = self._fp._safe_read(amt) File "/usr/lib64/python3.6/http/client.py", line 612, in _safe_read chunk = self.fp.read(min(amt, MAXAMOUNT)) File "/usr/lib64/python3.6/socket.py", line 586, in readinto return self._sock.recv_into(b) ConnectionResetError: [Errno 104] Connection reset by peer

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/requests/models.py", line 750, in generate for chunk in self.raw.stream(chunk_size, decode_content=True): File "/usr/lib/python3.6/site-packages/urllib3/response.py", line 490, in stream for line in self.read_chunked(amt, decode_content=decode_content): File "/usr/lib/python3.6/site-packages/urllib3/response.py", line 694, in read_chunked self._original_response.close() File "/usr/lib64/python3.6/contextlib.py", line 99, in exit self.gen.throw(type, value, traceback) File "/usr/lib/python3.6/site-packages/urllib3/response.py", line 378, in _error_catcher raise ProtocolError('Connection broken: %r' % e, e) urllib3.exceptions.ProtocolError: ("Connection broken: ConnectionResetError(104, 'Connection reset by peer')", ConnectionResetError(104, 'Connection reset by peer'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "ruri_main.py", line 49, in cd.insertone(cr.crawling('ilbe', 600)) #저장할 컬렉션은 ini 파일에서 변경해야 함 File "/home/centos/tmp/ruri_service.py", line 29, in crawling result = wc.crawlingposts(lastpage, ctargetdata) #크롤링 실행 및 결과를 변수에 담음 File "/home/centos/tmp/ruri_crawler.py", line 245, in crawlingposts contents_part_list = self.cr_lowerpages(headers, upper_page_list, keykeys, keyvalues) File "/home/centos/tmp/ruri_crawler.py", line 146, in cr_lowerpages inner_res = requests.get(innerlink, headers=headers) File "/usr/lib/python3.6/site-packages/requests/api.py", line 75, in get return request('get', url, params=params, kwargs) File "/usr/lib/python3.6/site-packages/requests/api.py", line 60, in request return session.request(method=method, url=url, kwargs) File "/usr/lib/python3.6/site-packages/requests/sessions.py", line 533, in request resp = self.send(prep, **send_kwargs) File "/usr/lib/python3.6/site-packages/requests/sessions.py", line 686, in send r.content File "/usr/lib/python3.6/site-packages/requests/models.py", line 828, in content self._content = b''.join(self.iter_content(CONTENT_CHUNK_SIZE)) or b'' File "/usr/lib/python3.6/site-packages/requests/models.py", line 753, in generate raise ChunkedEncodingError(e) requests.exceptions.ChunkedEncodingError: ("Connection broken: ConnectionResetError(104, 'Connection reset by peer')", ConnectionResetError(104, 'Connection reset by peer'))

ul8ksgdmy commented 5 years ago

현재 예외처리가 제대로 되는지 알 수 없어 생각한 해결책.

톰캣서버를 활성화 시킨다음에 서버에 접속시키면서 강제로 에러를 발생시켜 connectionerror를 예외처리하면 우선 해결이 되는지 확인.