inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

브라켓에서는 a 태그 #none을 해노면 안되는데 비주얼코드에서는 none이안먹히는거같아서요..

미해결

[2026년 출제기준] 웹디자인개발기능사 실기시험 완벽 가이드

사진처럼 링크 된거처럼 보이는데 비주얼코드에서는 #none 해놓으면 안먹히는거같은데 ,,아닌가요 ? 저런경우에는text-decoration:none 을 해야할까요 ? ㅠ

  • HTML/CSS
  • jquery
  • 웹-디자인
jkjk7088 댓글 2 좋아요 1 조회수 294

[미니블로그]

미해결

처음 만난 리액트(React)

미니블로그 다 따라하고 실행하면 에러가 발생합니다. 어떤 문제일까요?

  • HTML/CSS
  • javascript
  • react
jslim9413 댓글 1 좋아요 0 조회수 535

hostname 페이지 접속 실패

미해결

비전공자를 위한 진짜 입문 올인원 개발 부트캠프

그랩님 안녕하세요 현재 depoly가 완료되었습니다. 그런데 hostname페이지로 접속이 안되고 아래와 같이 실패하고있습니다. 어떤부분이 문제인지 문의드립니다. git 링크: https://github.com/sunghankwon/grab-market-server 다른 수강생분들에게도 문제 해결에 도움을 줄 수 있도록 좋은 질문을 남겨봅시다 :) 1. 질문은 문제 상황을 최대한 표현해주세요. 2. 구체적이고 최대한 맥락을 알려줄 수 있도록 질문을 남겨 주실수록 좋습니다. 그렇지 않으면 답변을 얻는데 시간이 오래걸릴 수 있습니다 ㅠㅠ ex) A라는 상황에서 B라는 문제가 있었고 이에 C라는 시도를 해봤는데 되지 않았다! 3. 먼저 유사한 질문이 있었는지 꼭 검색해주세요!

  • HTML/CSS
  • javascript
  • react
  • node.js
  • react-native
  • 머신러닝
  • express
  • tensorflow
박상현 댓글 3 좋아요 0 조회수 621

장바구니 파트 checkbox 질문

해결됨

모바일 웹 퍼블리싱 포트폴리오 with Figma

선생님. 장바구니 밑에 표시해 둔 체크박스가 좀 이상해서 질문드립니다. 첫번째 체크 박스와 두 번째 체크 박스의 크기가 상품명 글자수에 따라 커졌다 작아졌다 불규칙하게 변하는데 이 부분이 좀 이상합니다. 첫번째 아이템 상품명 글자수와 두번째 아이템 상품명 글자수를 같게 입력하면 체크박스 크기가 일정하고 둘 중 하나라도 상품명 글자수를 늘리거나 줄이면 체크박스 사이즈가 작아졌다 커졌다 하는데 이 부분이 혹시 display:flex; align-items: flex-start;와 관련이 있는 건가요? 확실히 잘 모르겠습니다. 상품명 글자수에 상관없이 체크박스 크기가 변하지 않게 하려면 어떻게 해야 하는지 궁금해서 질문드립니다.

  • HTML/CSS
  • jquery
  • 모바일-디자인
  • figma
  • 포트폴리오
김지환 댓글 1 좋아요 1 조회수 591

섹션2 번째, opacity=0 되지 않고 잔상이 남습니다.

해결됨

애플 웹사이트 인터랙션 클론!

섹션2 번째 내용입니다. 해당과정을 리액트에서 적용하면서 따라가고 있습니다. 돔접근에 대해서는 useRef를 사용해서 잘 따라가고 있는데, scrollSection1 의 부분에서 scrollSection1Msg1~scrollSection1Msg4 의 opacity 부분에서 아래와 같이 작업했습니다. 그런데 화면에 잔상이 남습니다. 완전히 opacity=0 가 되지 않는 것처럼 희미하게 글자들이 중첩되며 남아 있습니다. (맥북 M1) values : { selectionMsgA_opacity : [0 ,1, {start: 0.1, end:0.2}], selectionMsgA_opacity_out : [1 ,0, {start: 0.25, end:0.3}], else if (scrollRatio <= 0.3) { obj.Section1Msg1.current.style.opacity = calcValues(values.selectionMsgA_opacity_out, currentYoffset) obj.Section1Msg1.current.style.transform = `translateY(${ calcValues(values.selectionMsgA_translateY_out, currentYoffset)}%)`

  • HTML/CSS
  • javascript
  • 웹-디자인
  • svg
  • 인터랙티브-웹
  • 클론코딩
Edwin Y. Park 댓글 1 좋아요 0 조회수 560

beauty 익스텐션이 설치가 안됩니다.

미해결

[2026년 출제기준] 웹디자인개발기능사 실기시험 완벽 가이드

■ 질문 남기실 때 꼭! 참고해주세요. - 먼저 유사한 질문이 있었는지 검색해주세요. - 궁금한 부분이 있으시면 해당 강의의 타임라인 부분을 표시해주시면 좋습니다. - HTML, CSS, JQUERY 코드 소스를 텍스트 형태로 첨부해주시고 스크린샷도 첨부해주세요. - 다운로드가 필요한 파일은 해당 강의의 마지막 섹션에 모두 있습니다. 질문 하실 때 어떤 유형인지 말씀해주세요. 첨부와같이 나오는데 설치가 안되어도 하나씩 입력하면 되기는 하지만 설치가 안되어도 상관없겠죠?아니면 대체하는 익스텐션이 있는걸까요?

  • HTML/CSS
  • jquery
  • 웹-디자인
fairyhyun 댓글 1 좋아요 3 조회수 384

교재와 강의 순서 매치오류

미해결

[2026년 출제기준] 웹디자인개발기능사 실기시험 완벽 가이드

코딩웍스 교수님 안녕하세요! 필기시험 합격후 실기 시험 대비하여 수업을 듣고 있는 수강생입니다. 저는, 섹션 00. 부터 시작해서 섹션01. 섹션02.를 수강하고 있는데요. 수강하기 전에 미리 섹션13.에 있는 핵심이론 PDF교재를 출력해서 준비한 후에 섹션02.수업을 듣고있습니다. 그런데 강의 순서와 교재 순서도 맞지 않고,, HTML교재에는 이미지맵, 유튜브다운로드, 멀티미디어, 표만들기, 폼 요소 등 더 많은 내용이 실려있는데 강의목록에는 보이지않고... 다루지 않는 것 같아서 의문이 생겨 질문 남깁니다. 교재에는 있지만 강의목록에는 없는 부분들은 혼자서 독학해야되는 부분인건가요? 비전공자라서 아예 처음이라 이 강의를 큰맘먹고 결제 후 차근차근 따라가며 실기준비를 하고자했는데 강의에서는 다 다루지않아서.... 어떻게 준비를 해야되는건지 막막합니다. 그리고 수업순서는 섹션00부터 차례대로 수강해나가면서 실습을 같이 따라하면서 준비하면 실기 합격과 가까워지는 것은 맞는걸까요?? 바쁘신 와중에 질문 읽어주셔서 감사합니다. 답변 부탁드립니다. 감사합니다.

  • HTML/CSS
  • jquery
  • 웹-디자인
greatlife 댓글 1 좋아요 1 조회수 323

현재 바뀐건지 문의드립니다! 숫자를 낮춰 blue의 우선순위를 높이려했는데 blue를 red가 무조건 이기는 것으로 보여서요.

미해결

쉽고 빠른 스타일링 Tailwind CSS 기초 가이드

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 현재 문법이 바뀐건가용?

  • HTML/CSS
인연타로 댓글 3 좋아요 0 조회수 479

higher order function 에서

미해결

실리콘밸리 엔지니어가 가르치는 파이썬 기초부터 고급까지

128줄에 return inside에서 inside()를 안하는 이유가 궁금합니다 @higher_order_example 자체가 inside 리턴받은 함수를 자동으로 ()붙여서 실행해주는 것인가요? 136줄에 sample_example()을 안쓰면 121줄에 있는 func 매개변수로 못넣는것인가요???

  • python
  • 알고리즘
남기정 댓글 2 좋아요 1 조회수 368

코딩암기?하는건가요?

미해결

[2026년 출제기준] 웹디자인개발기능사 실기시험 완벽 가이드

웹디자인실기를 보려고하는데요 강의의 코딩하는것들을 여러 유형별로 암기하는건가요? 제작하는 과정을 외워질때까지 몇번이고 만들어보면 될까요?

  • HTML/CSS
  • jquery
  • 웹-디자인
fairyhyun 댓글 1 좋아요 1 조회수 435

axios error

미해결

비전공자를 위한 진짜 입문 올인원 개발 부트캠프

안녕하세요 그랩님! 바로 아래 질문과 같이 axios error가 콘솔창에 뜨는데 포스트맨으로 다른 api 연결 확인 다 되었고 app.use(cors()); 역시 서버의 index.js 에 기재되어 있는데도 여전히 오류가 뜨고 있어 혹시 이런경우엔 어떻게 해결이 가능할지 문의드리고자 합니다!

  • HTML/CSS
  • javascript
  • react
  • node.js
  • react-native
  • 머신러닝
  • express
  • tensorflow
diane_kim 댓글 2 좋아요 0 조회수 594

self.client.post에 글이 생성되지않습니다

미해결

Do It! 장고+부트스트랩: 파이썬 웹개발의 정석

강의 영상과 똑같이 작성했음에도 last_post의 내용이 client가 생성한 post가 아닌, post_003의 내용이 들어가면서 Failed가 발생합니다. 실행결과 Failed self.assertEqual(last_post.title, 'Post Form 만들기') AssertionError: '세 번째 포스트 입니다.' != 'Post Form 만들기' - 세 번째 포스트 입니다. + Post Form 만들기 [test.py 코드] from time import sleep from django.test import TestCase, Client from bs4 import BeautifulSoup from .models import Post, Category, Tag from django.contrib.auth.models import User class TestView(TestCase): def setUp(self): self.client = Client() # 사용자 생성 self.user_yunju = User.objects.create_user( username='yunju', password='0129' ) self.user_subin = User.objects.create_user( username='subin', password='cute0313' ) self.user_yunju.is_staff = True self.user_yunju.save() # 카테고리 생성 self.category_programming = Category.objects.create( name='programming', slug='programming' ) self.category_music = Category.objects.create( name='music', slug='music' ) # 태그 생성 self.tag_python_kar = Tag.objects.create( name="파이썬 공부", slug='파이썬-공부' ) self.tag_python = Tag.objects.create( name="python", slug='python' ) self.tag_django = Tag.objects.create( name="django", slug='django' ) # 포스트 생성 self.post_001 = Post.objects.create( title="첫 번째 포스트 입니다.", content="Hello World! We are the World", author=self.user_yunju, category=self.category_programming ) self.post_001.tags.add(self.tag_django) self.post_002 = Post.objects.create( title="두 번째 포스트 입니다.", content="저는 마라탕과 떡볶이를 사랑합니다", author=self.user_subin, category=self.category_music ) self.post_003 = Post.objects.create( title="세 번째 포스트 입니다.", content="Category가 없는 포스트입니다.", author=self.user_subin ) self.post_003.tags.add(self.tag_django) self.post_003.tags.add(self.tag_python) # 내비게이션바 함수 def navbar_test(self, soup): navbar = soup.nav self.assertIn('Blog', navbar.text) self.assertIn('Blog', navbar.text) logo_btn = navbar.find('a', text='Do It Django') self.assertEqual(logo_btn.attrs['href'], '/') home_btn = navbar.find('a', text='Home') self.assertEqual(home_btn.attrs['href'], '/') blog_btn = navbar.find('a', text='Blog') self.assertEqual(blog_btn.attrs['href'], '/blog/') about_me_btn = navbar.find('a', text='About me') self.assertEqual(about_me_btn.attrs['href'], '/about_me/') # 카테고리 카드 함수 def category_card_test(self, soup): categories_card = soup.find('div', id='categories-card') self.assertIn('Categories', categories_card.text) self.assertIn( f'{self.category_programming}({self.category_programming.post_set.count()})', categories_card.text ) self.assertIn( f'{self.category_music}({self.category_music.post_set.count()})', categories_card.text ) self.assertIn( f'미분류({Post.objects.filter(category=None).count()})', categories_card.text ) # 포스트가 있는 경우 def test_post_list_with_posts(self): self.assertEqual(Post.objects.count(), 3) response = self.client.get('/blog/') self.assertEqual(response.status_code, 200) soup = BeautifulSoup(response.content, 'html.parser') self.assertIn('Blog', soup.title.text) self.navbar_test(soup) self.category_card_test(soup) main_area = soup.find('div', id='main-area') post_001_card = main_area.find('div', id='post-1') self.assertIn(self.post_001.title, post_001_card.text) self.assertIn(self.post_001.category.name, post_001_card.text) self.assertIn(self.tag_django.name, post_001_card.text) self.assertNotIn(self.tag_python.name, post_001_card.text) self.assertNotIn(self.tag_python_kar.name, post_001_card.text) post_002_card = main_area.find('div', id='post-2') self.assertIn(self.post_002.title, post_002_card.text) self.assertIn(self.post_002.category.name, post_002_card.text) self.assertNotIn(self.tag_django.name, post_002_card.text) self.assertNotIn(self.tag_python.name, post_002_card.text) self.assertNotIn(self.tag_python_kar.name, post_002_card.text) post_003_card = main_area.find('div', id='post-3') self.assertIn(self.post_003.title, post_003_card.text) self.assertIn('미분류', post_003_card.text) self.assertIn(self.tag_django.name, post_003_card.text) self.assertIn(self.tag_python.name, post_003_card.text) self.assertNotIn(self.tag_python_kar.name, post_003_card.text) self.assertIn(self.post_001.author.username.upper(), main_area.text) self.assertIn(self.post_002.author.username.upper(), main_area.text) # 포스트가 없는 경우 def test_post_list_without_posts(self): Post.objects.all().delete() self.assertEqual(Post.objects.count(), 0) response = self.client.get('/blog/') self.assertEqual(response.status_code, 200) soup = BeautifulSoup(response.content, 'html.parser') self.navbar_test(soup) self.assertIn('Blog', soup.title.text) main_area = soup.find('div', id='main-area') self.assertIn('아직 게시물이 없습니다.', main_area.text) # 상세페이지 함수 def test_post_detail(self): self.assertEqual(Post.objects.count(), 3) self.assertEqual(self.post_001.get_absolute_url(), '/blog/1/') response = self.client.get(self.post_001.get_absolute_url()) self.assertEqual(response.status_code, 200) soup = BeautifulSoup(response.content, 'html.parser') self.navbar_test(soup) self.category_card_test(soup) self.assertIn(self.post_001.title, soup.title.text) main_area = soup.find('div', id='main-area') post_area = main_area.find('div', id='post-area') self.assertIn(self.post_001.title, post_area.text) self.assertIn(self.post_001.category.name, post_area.text) self.assertIn(self.user_yunju.username.upper(), post_area.text) self.assertIn(self.post_001.content, post_area.text) self.assertIn(self.tag_django.name, post_area.text) self.assertNotIn(self.tag_python.name, post_area.text) self.assertNotIn(self.tag_python_kar.name, post_area.text) # 카테고리별 페이지 나타내는 함수 def test_category_page(self): response = self.client.get( self.category_programming.get_absolute_url()) self.assertEqual(response.status_code, 200) soup = BeautifulSoup(response.content, 'html.parser') self.navbar_test(soup) self.category_card_test(soup) main_area = soup.find('div', id='main-area') self.assertIn(self.category_programming.name, main_area.h1.text) self.assertIn(self.category_programming.name, main_area.text) self.assertIn(self.post_001.title, main_area.text) self.assertNotIn(self.post_002.title, main_area.text) self.assertNotIn(self.post_003.title, main_area.text) # 태그 페이지를 나타내는 함수 def test_tag_page(self): response = self.client.get(self.tag_django.get_absolute_url()) self.assertEqual(response.status_code, 200) soup = BeautifulSoup(response.content, 'html.parser') self.navbar_test(soup) self.category_card_test(soup) self.assertIn(self.tag_django.name, soup.h1.text) main_area = soup.find('div', id='main-area') self.assertIn(self.tag_django.name, main_area.text) self.assertIn(self.post_001.title, main_area.text) self.assertNotIn(self.post_002.title, main_area.text) self.assertIn(self.post_003.title, main_area.text) # 로그인하지 않은 사용자에 대한 폼 제한 함수 def test_create_post_without_login(self): response = self.client.get('/blog/create_post/') self.assertNotEqual(response.status_code, 200) # 폼(form)을 이용한 포스트 작성 페이지 생성 # 로그인한 사용자만 폼 작성 가능 def test_create_post_with_login(self): self.client.login(username='yunju', password='0129') response = self.client.get('/blog/create_post/') self.assertEqual(response.status_code, 200) soup = BeautifulSoup(response.content, 'html.parser') self.assertEqual('Create Post - Blog', soup.title.text) main_area = soup.find('div', id='main-area') self.assertIn('Create a New Post', main_area.text) self.client.post( '/blog/create_post/', { 'title': 'Post Form 만들기', 'content': 'Post Form 페이지를 만듭시다.', }, ) last_post = Post.objects.last() self.assertEqual(last_post.title, 'Post Form 만들기') self.assertEqual(last_post.author.username, 'yunju') self.assertEqual(last_post.content, 'Post Form 페이지 만들어보자!') [views.py 코드] from django.core.exceptions import PermissionDenied from django.shortcuts import render, redirect from django.views.generic import ListView, DetailView, CreateView, UpdateView from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin from .models import Post, Category, Tag # 리스트를 출력하는 django 기본 라이브러리 class PostList(ListView): model = Post ordering = '-pk' def get_context_data(self, **kwargs): context = super(PostList, self).get_context_data() context['categories'] = Category.objects.all() context['no_category_post_count'] = Post.objects.filter( category=None).count() return context # 하나의 리스트를 불러오는 django 기본 라이브러리 class PostDetail(DetailView): model = Post def get_context_data(self, **kwargs): context = super(PostDetail, self).get_context_data() context['categories'] = Category.objects.all() context['no_category_post_count'] = Post.objects.filter( category=None).count() return context # 포스트 생성 함수 class PostCreate(LoginRequiredMixin, UserPassesTestMixin, CreateView): model = Post fields = ['title', 'hook_text', 'content','head_image', 'file_upload', 'category'] def test_func(self): return self.request.user.is_superuser or self.request.user.is_staff def form_valid(self, form): current_user = self.request.user if current_user.is_authenticated and (current_user.is_staff or current_user.is_superuser): form.instance.author = current_user return super(PostCreate, self).form_valid(form) else: return redirect('/blog/') class PostUpdate(LoginRequiredMixin, UpdateView): model = Post fields = ['title', 'hook_text', 'content','head_image', 'file_upload', 'category'] template_name = 'blog/post_update_form.html' def dispatch(self, request, *args, **kwargs): if request.user.is_authenticated and request.user == self.get_object().author: return super(PostUpdate, self).dispatch(request, *args, **kwargs) else: return PermissionDenied # 카테고리별 페이지 반환 함수 def category_page(request, slug): if slug == 'no_category': category = '미분류' post_list = Post.objects.filter(category=None) else: category = Category.objects.get(slug=slug) post_list = Post.objects.filter(category=category) return render( request, 'blog/post_list.html', { 'post_list': post_list, 'categories': Category.objects.all(), 'no_category_post_count': Post.objects.filter(category=None).count(), 'category': category } ) # 태그별 페이지 반환 함수 def tag_page(request, slug): tag = Tag.objects.get(slug=slug) post_list = tag.post_set.all() return render( request, 'blog/post_list.html', { 'post_list': post_list, 'categories': Category.objects.all(), 'no_category_post_count': Post.objects.filter(category=None).count(), 'tag': tag } )

  • HTML/CSS
  • javascript
  • python
  • django
  • bootstrap
  • aws
  • docker
  • tdd
syrose00 댓글 1 좋아요 0 조회수 356

css 질문

미해결

처음 만난 리액트(React)

안녕하세요! 소플님 실습을 하는 중인데 그림에 해당 부분의 간격이 안생기는데 저 css는 어디 컴포넌트에서 주신걸까요? 소스를 한참 비교해봤는데 모르겠어서 문의 드립니다!!

  • HTML/CSS
  • javascript
  • react
sohee 댓글 1 좋아요 1 조회수 422

keyframeEffect를 찾을 수 없다고 나와요

미해결

웹 애니메이션의 새로운 표준, Web Animations API

안녕하세요 GroupEffect 수강중에 이런 에러가 떠서요 - 질문에 대한 답변은 강의자가 하는 경우도 있고, 수강생 여러분들이 해주시는 경우도 있습니다. 같이 도와가며 공부해요! :) - 작성하신 소스코드 자체의 오류보다는, 개념이나 원리가 이해되지 않는 부분을 질문해주시는게 좋습니다. 그대로 따라했는데 소스코드에서 버그가 나는 경우는 99%가 오타에 의한거라서, 완성된 소스랑 찬찬히 비교해보시면 직접 찾으실 수 있을 거예요. 개발자도구 console에 오류로 표시된 부분만 완성 코드에서 복사->붙여넣기를 해보시는 것도 방법입니다. - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

  • HTML/CSS
  • javascript
  • 인터랙티브-웹
  • frontend
  • web-animations-api
조민희 댓글 1 좋아요 0 조회수 522

다형성 질문..

미해결

풀스택을 위한 탄탄한 프런트엔드 부트캠프 (HTML, CSS, 바닐라 자바스크립트 + ES6) [풀스택 Part2]

모던 웹을 위한 다양한 Javascript+ES6 객체 선언 기법 이해3 11:35 초 이 부분에서.. get_message()를 constructor(name,brand) 안에 안쓰는 이유가 있나요? 잘 이해가 안가서요... 그리고 get_message라고 써야하나요 아니면 getMessage 라고 해야하나요?

  • HTML/CSS
  • javascript
  • es6
hanyn 댓글 1 좋아요 0 조회수 262

수업자료

미해결

[웹 개발 풀스택 코스] HTML&CSS 기초

선생님께서 올려주신 수업자료는 어디에서 다운받는것인가요

  • HTML/CSS
imhj1177 댓글 1 좋아요 0 조회수 575

14강 비디오와 오디오

미해결

[웹 개발 풀스택 코스] HTML&CSS 기초

14강 비디오와 오디오에서 선생님이 쓰시는 자료들은 다운받을수 있는게 아닌가요/? 그리고 track태그가 자동으로 뜨지 않는데 무엇이 문제점인지 알수있을까요?

  • HTML/CSS
imhj1177 댓글 1 좋아요 1 조회수 617

선생님 데이터 import가 안돼요 ㅠㅠ

미해결

[개정판] 파이썬 머신러닝 완벽 가이드

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 강의 내용을 질문할 경우 몇분 몇초의 내용에 대한 것인지 반드시 기재 부탁드립니다. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 선생님 보스턴 가격예측 데이터 임포트가 안돼요 ㅠㅠ

  • python
  • 머신러닝
  • 통계
이호준 댓글 2 좋아요 0 조회수 497

'블랙핑크' 검색 시에만 오류가 뜨는 현상

미해결

[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)

안녕하세요. 강사님 아래 코드에서 '블랙핑크' 를 검색할 때 Traceback (most recent call last): File "c:\pratice_crolling\심화1_\03_스포츠 뉴스 크롤링.py ", line 52, in <module> print(article_title.text.strip()) ^^^^^^^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'text' 다음과 같은 오류가 뜹니다 ㅠㅠ CSS 선택자, 오타도 모두 맞게 확인이 되는데 왜 저 검색어만 오류가 뜰까요ㅠㅠ? # -*- coding: euc-kr -*- # 네이버에서 손흥민, 오승환과 같은 스포츠 관련 검색어 크롤링하기 import requests from bs4 import BeautifulSoup import pyautogui import time search = pyautogui.prompt("어떤 것을 검색하시겠어요?") response = requests.get(f"https://search.naver.com/search.naver?sm=tab_hty.top&where=news&query={search}&oquery=%EC%98%B7%EC%9C%BC%ED%99%98&tqi=i74G%2FdprvTossZPeMhCssssssko-058644") html = response.text soup = BeautifulSoup(html, "html.parser") articles = soup.select(".info_group") for article in articles: # '네이버뉴스' 가 있는 기사만 추출한다. (<a> 하이퍼링크가 2개 이상인 경우에 해당) links = article.select("a.info") if len(links) >=2 : url = links[1].attrs['href'] response = requests.get(url, headers={'User-agent':'Mozila/5.0'}) html = response.text soup = BeautifulSoup(html, "html.parser") # 스포츠 기사인 경우 if "sports" in url: article_title = soup.select_one("h4.title") article_body = soup.select_one("#newsEndContents") # 본문 내에 불필요한 내용 제거 p태그와 div태그의 내용은 출력할 필요가 없다. 없애주자. p_tags = article_body.select("p") # 본문에서 p 태그인 것들을 추출 for p_tag in p_tags: p_tag.decompose() div_tags = article_body.select("div") # 본문에서 div 태그인 것들을 추출 for div_tag in div_tags: div_tag.decompose() # 연예 기사인 경우 elif "entertain" in url: article_title = soup.select_one(".end_tit") article_body = soup.select_one("#articeBody") # 일반 뉴스 기사인 경우 else: article_title = soup.select_one("#title_area") article_body = soup.select_one("#dic_area") # 출력문 print("==================================================== 주소 ===========================================================") print(url.strip()) print("==================================================== 제목 ===========================================================") print(article_title.text.strip()) print("==================================================== 본문 ===========================================================") print(article_body.text.strip()) #strip 함수는 앞 뒤의 공백을 제거한다. time.sleep(0.3)

  • python
  • 웹-크롤링
댓글 2 좋아요 0 조회수 323

인기 태그

인프런 TOP Writers

주간 인기글