[TIL] 크롤링

이현동·2023년 1월 10일
0

TIL

목록 보기
2/59

토이프로젝트

13조는 작성을 완료한 블로그의 URL에서 Open Graph를 크롤링 해온 뒤에 웹페이지에 보여주고, 좋아요 버튼을 눌러 순위표를 확인할 수 있는 웹페이지를 만들었다.

블로그 URL을 크롤링하는 과정에서 벨로그와 티스토리는 크롤링 할 수 있었지만 네이버 블로그는 크롤링이 되지 않았다. 아무 블로그나 열어 확인해보니 OG태그를 찾을 수 없었고 구글링을 통해 iframe태그의 'src'의 url을 'http://blog.naver.com/"iframe의 src"
와 같이 넣어서 크롤링하면 된다는 글을 보고 위의 주소처럼 넣었더니 OG태그가 나타났다.

하지만 어째서인지 잘 사용해 왔던 크롤링했던 코드를 통해 크롤링 하려고 하니

naver_url_iframe = soup.select_one('iframe#mainFrame')['src']
naver_blog_url = "http://blog.naver.com" + naver_url_iframe

data = requests.get(naver_blog_url, headers=headers)

title_receive = soup.select_one('meta[property="og:title"]')['content']

TypeError: 'NoneType' object is not subscriptable
위와 같은 에러가 발생했다.
다시 구글링을 통해서 네이버와 같은 사이트는 크롤링을 하지 못하도록 서버에서 막아놔서 유저인 '척?'을 해야한다고 한다.
그래서 title_receive = soup.select_one('meta[property="og:title"]')를 실행해 봤더니 [].. 빈 배열이 나온다. 요소 검사 상에서는 보이지만 파이썬에서 크롤링 하려고 하면 네이버 서버에서 막는 것이라고 한다.

만약 네이버 블로그를 넣으면 기존에 og태그가 없기 때문에 기록버튼이 눌리지 않고, 파이썬 터미널에서는 위에서 언급했던 에러, 크롬에서는 아래와 같은 에러가 발생했다.
Failed to load resource: the server responded with a status of 500 (INTERNAL SERVER ERROR)

naver블로그가 입력 되었을 상황을 막기 위해 아래코드를 사용했다....

test = vlog_url_receive.split('.')
   
if test[1] == 'naver':
	return jsonify({'msg': '네이버는 지원하지 않습니다 😂'})
else:
	title_receive = soup.select_one('meta[property="og:title"]')['content']
profile
https://hdlee.dev

0개의 댓글