잡다한 프로젝트

인터넷 프로그래밍 크롤링 과제1 (php로 인해 헤매는 내용;;)

studying develop 2019. 12. 20. 00:47

음 자유 주제로 서버 클라이언트 구조로 크롤링해서 프로젝트를 진행하라 하셨다...

 

몇일동안 고민해본 결과 평소에 생각하던 아이디어까지 일단 적어보면

 

1. 중간, 기말 고사 문제 구글에서 찾아서 보여주기 - 단원,키워드 검색시 문제들을 보여주는 것이다.

 

2. 넷플릭스 볼만한것 블로그들 추천 종합해서 추천 해주기 - 구글에 넷플릭스 추천 목록 찾아서 꽤나 추천율이 높은 것을 리스트로 추천해주는 것이다. 아니면 제목 입력하면 구글 블로그들 내가 종합해서 추천 점수 매겨주는거임. 후자로 할듯 일단은 전자는 내가 넷플릭스 영화 목록을 못찾았다. 그래서 영화나 드라마 제목 입력하면 구글에 내가 대신 검색해서 블로그들이 얼마나 추천해주는지 나만의 방식으로 평가해주는것임 !ㅎㅎ.

 

3. 아마존 블랙 프라이 데이 할인 적용시 알람 주기 - 말 그대로인데 이건 웹으로 구현해야 하는 문제로 보류했다.

 

여기서 2번을 생각했다. 

 

일단 

이렇게 입력했는데 복붙하면 아래처럼 나온다.... %EB ? %는 무엇인가.

https://www.google.com/search?q=%EB%B8%8C%EB%A0%88%EC%9D%B4%ED%82%B9+%EB%B0%B0%EB%93%9C+and+%EB%84%B7%ED%94%8C%EB%A6%AD%EC%8A%A4+%EC%98%81%ED%99%94+%EC%B6%94%EC%B2%9C

 

브레이킹 배드 and 넷플릭스 영화 추천 - Google 검색

2018. 6. 26. · [넷플릭스 추천] 넷플릭스의 웰 메이드 시리즈 5선 (오펀블랙, 덱스터, 브레이킹 ... 브레이킹 배드야 워낙 유명한 명작이고, '오자크' 역시 넷플릭스가 인정한 ... 게다가, 단편으로 끝나는 영화가 아닌 시즌제로 돌입한 TV시리즈인만큼,.

www.google.com

 

%EB 이런게 문자열 인코딩된거 같아서 찾아 보니

https://stackoverflow.com/questions/21477986/url-encoding-in-google-chrome

 

이거다 내가 검색할 url을 위에 캡쳐 처럼 입력하고 요청하기 전에 utf-8로 인코딩해서 get request하면 될거 같다.

 

 

주소 입력하는 html 파일이랑, 그걸 크롤링해오는 php 파일은 이미 있다.

html 파일에는 개인정보가 있어서..학번; 그냥 복붙 했다.

 

 

<HTML>

<BODY>

    <FORM method ="POST" action="웹 크롤러.php가 있는 경로를 쓰세용/WebCrawler.php">

    Type in your http address : <INPUT NAME = "addr"><p>

 

<INPUT TYPE = "submit">

</FORM>

</BODY>

</HTML>

 

 

 

넘긴 url에 get요청에 대한 response를 보여준다.

 

 

이렇게 브라우저 화면이랑 밑에는 text로 받는다 근데 img 태그랑 a 태그만 받아서 내가 원하는 "브레이킹 배드" + "넷플릭스 추천" 이게 안보이는듯 하다. 나는 하나의 rc 클래스 밑에 넷플릭스 "영화 추천" 그리고 "브레이킹 배드" 이 두 단어가 함께 있으면 갯수를 셀려고 했다.

 

 

디코딩 해야 한글이 보일 것이다.

이제 내가 할 일은 WebCrawler.php에서 원하는 클래스를 뽑고 거기서 여기서 디코딩해서 갯수를 세면 된다. 내가 생각한 평가 기준은 구글로 "제목" and "넷플릭스 추천" 이렇게 검색 했을때 앞에 10페이지에서 몇개나 나오나 이걸 점수로 매길려고 했다. 그리고 점수에 따른 평가를 사전에 저장해 놓고 보여줄려고 했음. 지금 get으로 페이지 넘어가는 방법도 알아내야 되네.

 

페이지 넘기는 방법은 &start=10 이게 2번째 페이지고 &start=20 이게 3번째 페이지. 이런식으로 넘겨야 한다.

https://www.google.com/search?q=%EB%B8%8C%EB%A0%88%EC%9D%B4%ED%82%B9+%EB%B0%B0%EB%93%9C+and+%EB%84%B7%ED%94%8C%EB%A6%AD%EC%8A%A4+%EC%98%81%ED%99%94+%EC%B6%94%EC%B2%9C&start=20

 

브레이킹 배드 and 넷플릭스 영화 추천 - Google 검색

2018. 12. 17. · 넷플릭스에 푹 빠졌습니다.미드던, 영화던,어떤 쟝르도 좋습니다. ... 들이요 블랙미러나 덱스터 브레이킹배드는 넷플릭스 가입하면 가장 많이 추천 ...

www.google.com

 

넷플 영화 리스트만 있으면 mysql에 넣고 순위 매기는 식으로 해볼만 할거 같다. 일단은 단일 항목에 대한 것 먼저 해보자.

 

 

 

 

이제 아래 html을 파싱 했다. 

이걸 파싱해야되

 

이렇게 입력하면
이렇게 뜬다.

이제 페이지를 넘기면서 여기서 "추천"이 몇개 나타나는지  세어 보면 된다.

 

 

하 그래서 php에서 strpos를 이용해서 비교해보려 하는데 진짜 안된다. 내 추측은 인코딩 문제 같은데

$test가 이때 ASCII이고 '브레이킹 배드'는 UTF-8이다

 

28번째 줄에서 mb_conver_encoding를 사용해서 이상하게 $element를 아무리 utf-8로 컨버팅 해도 안된다. 그래서 찾아보니까 utf-8은 ascii의 확장이라서 변환 해도 똑같다고 하는데 (무슨말인지 정확히는 모르겠다. 한번 다시 제대로 공부해 봐야겠다.) 

 

그래서 나는 '브레이킹 배드'를 고치려 안하고 앞에 html의 dom 객체들을 인코딩 해보려 했는데, 답은 ! '브레이킹 배드'를 ascii로 바꾸니까 됬다. ㅋㅋ 내 추측에는... strpos가 ascii 인코딩 된 문자열끼리만 확인해주는거 같다. (그럼 방금 해도 똑같다는건 뭔소리지..;) 먼가 함수마다 특정 인코딩 된 문자열만 할 수 있는게 있는건지, 아니면 데이터끼리 인코딩을 못 맞춰줘서 그런지 아직 잘 모르겠다. mb_substr보고 뭔가 힌트를 얻긴했다.