Makeshiftshelter01 / Mater

0 stars 1 forks source link

네이버 뉴스 크롤링 이슈 #14

Closed ul8ksgdmy closed 5 years ago

ul8ksgdmy commented 5 years ago

링크발견 naver 뉴스 https://sports.news.naver.com/kfootball/news/read.nhn?oid=450&aid=0000046104 Traceback (most recent call last): File "ruri_main.py", line 52, in cd.insert(cr.crawling('ruriweb', 4000)) #저장할 컬렉션은 ini 파일에서 변경해야 함 File "/home/centos/project/ruriweb/ruri_service.py", line 29, in crawling result = wc.crawlingposts(lastpage, ctargetdata) #크롤링 실행 및 결과를 변수에 담음 File "/home/centos/project/ruriweb/ruri_crawler.py", line 264, in crawlingposts news_company = news.add_news_company(links_in_content, board_link) File "/home/centos/project/ruriweb/news_company.py", line 88, in add_news_company selector = root.cssselect('td div div a img')[0] # 데스크탑 IndexError: list index out of range

코드 수정 이후에도 동일한 뉴스에서 동일한 증상 발생. 확인 필요.

ksm503 commented 5 years ago

혹시 센토스에 있는 news_company.py 파일이 제가 수정한 부분 반영 안 되어 있는거 아닌가요? 지금 에러가 나는 저 selector = root.cssselect('td div div a img')[0] 의 라인 번호가 88번 줄인데, 그게 out of range 에러 수정하기 전 라인 번호고, 제가 수정한 후의 해당 코드의 라인번호는 95번입니다

지금 형님 my 브랜치도 확인해보니까 제가 naver 부분 except로 고쳐놓은게 merge 가 안되어있는 상태입니다! 센토스에 넣으신 파일도 아마 적용이 안된 상태로 돌리신 것 같습니다 한번 확인 해주세요~ naver 파트에 except가 있어야 합니다(성목3나 성목3-1의 news_company 84~ 107 라인 부분입니다)

ul8ksgdmy commented 5 years ago

확인했어요~ my branch는 로컬에서만 합병하고 올리진 않았기 때문에 깃헙에는 안 보였을 거에요. ㅎㅎㅎ 그것과 상관없이 브랜치를 성목3으로 변경했을 때 로컬에서 성목3의 싱크가 제대로 안 되었던지 해당 라인을 수정한 버전은 업데이트가 안 되어 있었네요. 어쨌건 저의 삽질 때문에 고생했네요 ㅠㅠ 확인 감사용~

ksm503 commented 5 years ago

아닙니다 ㅋㅋ 잘 해결된 것 같아서 다행입니다

ul8ksgdmy commented 5 years ago

news_company에서 링크를 돌면서 접속에러 났네요. 예외 처리해야 할 것 같아요. 근데 이 부분은 메인에서도 똑같이 requests를 써서 발생하는 문제인데, 현재 저 역시 exception 예외를 해결중이라... 어쨌건 아직은 시도중인 예외처리까지 아래 첨부했으니 참고해서 수정 부탁요.

`daum 뉴스 https://news.v.daum.net/v/20181205210236307 뉴스1 링크발견 링크발견 링크발견 링크발견 링크발견 Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/urllib3/connection.py", line 159, in _new_conn (self._dns_host, self.port), self.timeout, **extra_kw) File "/usr/lib/python3.6/site-packages/urllib3/util/connection.py", line 57, in create_connection for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): File "/usr/lib64/python3.6/socket.py", line 745, in getaddrinfo for res in _socket.getaddrinfo(host, port, family, type, proto, flags): socket.gaierror: [Errno -2] Name or service not known

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 600, in urlopen chunked=chunked) File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 354, in _make_request conn.request(method, url, **httplib_request_kw) File "/usr/lib64/python3.6/http/client.py", line 1239, in request self._send_request(method, url, body, headers, encode_chunked) File "/usr/lib64/python3.6/http/client.py", line 1285, in _send_request self.endheaders(body, encode_chunked=encode_chunked) File "/usr/lib64/python3.6/http/client.py", line 1234, in endheaders self._send_output(message_body, encode_chunked=encode_chunked) File "/usr/lib64/python3.6/http/client.py", line 1026, in _send_output self.send(msg) File "/usr/lib64/python3.6/http/client.py", line 964, in send self.connect() File "/usr/lib/python3.6/site-packages/urllib3/connection.py", line 181, in connect conn = self._new_conn() File "/usr/lib/python3.6/site-packages/urllib3/connection.py", line 168, in _new_conn self, "Failed to establish a new connection: %s" % e) urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7ff02085c8d0>: Failed to establish a new connection: [Errno -2] Name or service not known

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/requests/adapters.py", line 449, in send timeout=timeout File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 638, in urlopen _stacktrace=sys.exc_info()[2]) File "/usr/lib/python3.6/site-packages/urllib3/util/retry.py", line 398, in increment raise MaxRetryError(_pool, url, error or ResponseError(cause)) urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='https', port=80): Max retries exceeded with url: //news.v.daum.net/v/20181205115206154 (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7ff02085c8d0>: Failed to establish a new connection: [Errno -2] Name or service not known',))

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "ruri_main.py", line 52, in cd.insert(cr.crawling('ruriweb', 4000)) #저장할 컬렉션은 ini 파일에서 변경해야 함 File "/home/centos/project/ruriweb/ruri_service.py", line 29, in crawling result = wc.crawlingposts(lastpage, ctargetdata) #크롤링 실행 및 결과를 변수에 담음 File "/home/centos/project/ruriweb/ruri_crawler.py", line 267, in crawlingposts news_company = news.add_news_company(links_in_content, board_link) File "/home/centos/project/ruriweb/news_company.py", line 66, in add_news_company res = requests.get(link[j], 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 646, in send r = adapter.send(request, kwargs) File "/usr/lib/python3.6/site-packages/requests/adapters.py", line 516, in send raise ConnectionError(e, request=request) requests.exceptions.ConnectionError: HTTPConnectionPool(host='https', port=80): Max retries exceeded with url: //news.v.daum.net/v/20181205115206154 (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7ff02085c8d0>: Failed to establish a new connection: [Errno -2] Name or service not known',)) `

ul8ksgdmy commented 5 years ago

참고용 예외

`
except ConnectionResetError as e: errorpass = True print('%s에서 에러 발생'% 'ConnectionResetError') print('%s 오류 다음 페이지에서 재접속' % e)

        except requests.ConnectionError as e:
            errorpass = True
            print('%s에서 에러 발생'% 'requests.ConnectionError')
            print('%s 오류 다음 페이지에서 재접속' % e)

        except requests.exceptions.ConnectionError as e:
            errorpass = True
            print('%s에서 에러 발생'% 'requests.exceptions.ConnectionError')
            print('%s 오류 다음 페이지에서 재접속' % e)

            #톰캣서버를 활성화 시킨다음에 서버에 접속시키면서 강제로 에러를 발생시켜
            #connectionerror를 누르면 해결이 되는지 확인.

            #여기에 재접속 코드 삽입. => 적용취소

        except requests.exceptions.ChunkedEncodingError as e:
            errorpass = True
            print('%s에서 에러 발생'% 'requests.exceptions.ChunkedEncodingError')
            print('%s 오류 다음 페이지에서 재접속' % e)

        except etree.ParserError as e:
            errorpass = True
            print('%s 오류로 다음 페이지에서 재접속' % e)
            # 내용이 비어 있다면 채우고 각 게시글의 내용, 링크, 댓글 등을 딕셔너리에 저장
            # 해당 페이지의 정보를 모두 blank 채우고 다음페이지 호출`
ul8ksgdmy commented 5 years ago

예외처리 적용