묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
Section 50 결제처리 레벨업 추가 학습 주제
Section 50 결제처리 레벨업 추가 학습 주제에서 포인트 충전 관련하여 문의드립니다. createPointTransactionsOfLoading에 API를 요청 했는데 404에러가 나옵니다!아임포트(테스트용)로 결제 성공하였고 응답받은 impUid도 잘 추가하였고, accessToken도 헤더에 포함시켰습니다. 무슨 문제일까요?ㅠㅠ 요청 mutationmutation { createPointTransactionOfLoading(impUid: "imp_618843313239") { amount } }error메세지{ "errors": [ { "message": "Request failed with status code 404", "locations": [ { "line": 2, "column": 3 } ], "path": [ "createPointTransactionOfLoading" ], "extensions": { "code": "INTERNAL_SERVER_ERROR", "exception": { "stacktrace": [ "Error: Request failed with status code 404", " at Object.callErrorProcessor (/codecamp_backend_api/dist/common/libraries/errorProcessor.js:8:11)", " at CreatePointTransactionOfLoadingService.fetchPaymentFromImpUid (/codecamp_backend_api/dist/api/pointTransaction/services/mutation/createPointTransactionOfLoading.service.js:42:36)", " at runMicrotasks (<anonymous>)", " at processTicksAndRejections (internal/process/task_queues.js:93:5)", " at async target (/codecamp_backend_api/node_modules/@nestjs/core/helpers/external-context-creator.js:76:28)", " at async /codecamp_backend_api/node_modules/@nestjs/core/helpers/external-proxy.js:9:24" ] } } } ], "data": null
-
해결됨독하게 되새기는 C 프로그래밍
실습 중에 혹시 예외 발생하신 분들을 위해
Enter, Leave로 동기화 후 메인 쓰레드 루프 탈출을 위해q를 입력했을 때 간헐적으로 아래와 같은 에러가 발생하였습니다요거.. 선생님께 여쭤보려다가 문득 원인을 찾았습니다혹시 저와 같은 에러를 겪으신 분들을 위해 정리를 하자면 아래와 같습니다 메인 쓰레드 루프 탈출 까지는 정상적으로 수행됩니다다만, DeleteCriticalSection 함수 호출 후 return 코드를 호출하기 전 찰나의 순간에set 또는 reset 워커 쓰레드에서 EnterCriticalSection을 호출하여 예외가 발생합니다 즉, DeleteCriticalSection과 return의 코드 호출은원자적이지 않기 때문에 두 함수가 수행되는 중간에다른 워커 쓰레드에서 EnterCriticalSection 함수를 호출하는 경우인데요 이는, Delete돼서 존재하지 않는 임계영역에 Enter를 시도하기 때문입니다
-
해결됨[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
안녕하세요? 질문 있습니다.
트와이스 앱 스플래시를 잘라내고 붙이는 부분에서,코드를 똑같이 했음에도 불구하고 오류가 나서강사님이 다른 답변에 코드를 달아 주신 것을 복붙하니 되었습니다.'SplashActiviy 부분의 영역이 intent-filter 부분을 감싸지 않는 것 같은데' 라고답변을 하신 걸 보았는데, 혹시 이게 무슨 말씀이신지 설명해 주실 수 있나요?감사합니다.
-
미해결[초급] 찍어먹자! 코틀린과 Spring Security + JWT로 회원가입 만들기
loginId는 왜 변경이 안될까요?
기존에 있던 정보를 삭제하고 새로 추가할경우엔 잘 동작하는데강의와 같이 업데이트할땐 loginId 변경이 안되네요..!
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
RedirectAttributes와 @PathVariable차이 질문 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]리턴에서 리다이렉트를 위한 URL을 지정할 때,위에는 RedirectAttributes를 사용하여 itemId를 파라미터로 받았고 아래는 @PathVariable을 사용하여 itemId를 파라미터로 받았습니다.이것의 차이는 무엇인가요?itemId를 받아올 수 있는 기능이 있다라는 것은 공통적이고RedirectAttributes는 RedirectAttributes에 더 특화된 기능을 사용하기 위해 불러오는 것이고 @PathVariable는 단순히 파라미터를 가져오는 기능이다라고 이해하면 될까요?
-
미해결
자바 클래스 선언 오류
public class EE { int a = 1; EE ee = new EE(); ee.a = 2; } 이렇게하면 오류가 나고여기서 블록을 하나 더 감싸면 오류가 안나더라구요 public class EE { int a = 1; EE ee = new EE(); { ee.a = 2 }; } 무슨 이유에서일까요?클래스 선언 블록에서는 무언가 동작을 하는 코드를 넣을수 없는건가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-K 시간초과 질문
https://www.acmicpc.net/source/66823795안녕하세요 선생님 항상 좋은 강의 감사드립니다.해당 코드를 보면 선생님의 코드와 사실상 동일한 것 같은데,왜 시간초과가 발생하는지 모르겠습니다. ㅠㅠ제가 어떤 부분을 놓치고 있는 걸까요?
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
ant-design icons을 설치했음에도 StopOutlined 아이콘이 보이지 않습니다!(에러 메시지 없음)
안녕하세요! React로 NodeBird SNS 만들기섹션1 프로필 페이지 만들기까지 수강한 수강생입니다!제로초님 강의와 트위터 클론 깃허브를 확인해도 원인을 알 수 없어 질문 글 올립니다!항상 강의 잘 보고 있습니다! 제로초님 항상 감사합니다! 사전에 antd 4버전, ant-design icons 4버전을 설치하였습니다.import { StopOutlined } from '@ant-design/icons'; 위처럼 ant-design icons를 설치했지만 앤트 디자인 아이콘이 뜨지 않습니다.버전 문제라고 생각해 사이트에서 4버전의 StopOutlined 아이콘을 가져와다시 시도했으나 같은 결과가 나타났습니다.FollowList.jsFollowList 컴포넌트의 return 코드 중 의심되는 부분의 코드를 올립니다. renderItem={(item) => { <List.Item style={{ marginTop: 20 }}> <Card actions={[<StopOutlined key="stop" />]}> <Card.Meta description={item.nickname} /> </Card> </List.Item> }}
-
해결됨실전! FastAPI 입문
강좌의 풀 코드가 github에 공개된게 없나요?
-학습을 하다가 중간 중간 막히는 곳이 있어.. 코드의 뭐가 잘못되었는지 확인하려는데..강의를 뒤로 돌아가서 영상으로 확인하려면 어렵습니다..강좌의 풀 코드가 github에 공개된게 없나요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
th:action이 잘 이해가 안됩니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]이 부분에서 th가 붙은 타임리프 문법은 html을 동적으로 움직이게 하는 역할이라고 이해했습니다. 근데 위의 코드에서 th:action은 어떤 동적인 역할을 하게 만드는 것인가요?
-
미해결[개정판] 파이썬 머신러닝 완벽 가이드
gridsearchcv관련 간단한 질문이 있습니다.
안녕하십니까, 많이 배우고 있습니다.질문 : GridSearchCV의 경우 k-fold만 사용 하는 것 같은데, stratified k-fold는 사용할 수 없나요? 아래는 chat gpt가 stratified k-fold 사용법을 알려줬는데 아래와 같이 사용하면 되는지 여쭙습니다. from sklearn.model_selection import StratifiedKFold, GridSearchCV from sklearn.svm import SVC # 예제 데이터와 모델 X, y = load_your_data() # 데이터를 로드하거나 생성하는 코드 model = SVC() # 사용할 모델 # Stratified K-Fold 교차 검증 설정 stratified_kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=42) # 그리드 서치 설정 param_grid = { 'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf'] } grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=stratified_kfold) # 그리드 서치 수행 grid_search.fit(X, y) # 최적의 매개변수와 결과 출력 print("Best parameters found: ", grid_search.best_params_) print("Best cross-validation score: {:.2f}".format(grid_search.best_score_)) 위 코드에서는 StratifiedKFold를 GridSearchCV의 cv 매개변수에 전달하여 Stratified K-Fold 교차 검증을 수행하고 있습니다. 따라서 그리드 서치는 Stratified K-Fold 교차 검증을 사용하여 모델의 성능을 평가합니다. StratifiedKFold의 n_splits 매개변수는 원하는 폴드 수를 지정할 수 있습니다.이렇게 하면 그리드 서치를 Stratified K-Fold 교차 검증과 함께 사용하여 클래스 간 분포를 고려한 모델 평가를 수행할 수 있습니다.
-
해결됨실전! 스프링 데이터 JPA
섹션 5 사용자 정의 레포지토리 구현 질문드립니다.
기본적인 java 개념 부족일수도 있습니다만강의 내용중에 사용자 정의레포지를 만들땐 Impl을 뒤에 꼭 붙여야 한다고 나와있고, 최신화된 강의내용을 봐도 그렇게 알고있는데요,그런데 이게 왜 Spring Data JPA에서 제공해야하는 기능인지 이해가 잘 안갑니다. Spring Data JPA가 지원을 안해주면 왜 오류를 뱉어야 하는지가 궁금합니다. 예를들어public interface RepositoryAInterface 와이를 구현한public class RepositoryA implements RepsitoryAInterface가 있다고 했을때,그리고 RepositoryA를 JPA을 이용하여 구현할때,EntityManager를 DI해서 직접 구현 하잖아요?그럼 끝난거 아닌가요? Spring Data JPA를 사용하는public interface RepositoryBInterface extends JPARepository<>가있다고 하면요.여기서 extends RepositoryA를 하나 추가했다고 해서 왜 에러가 나는 것인가요?그냥 이게 Spring Data JPA가 아니라 일반적인 java라고 생각해봤을때RepositoryBInterface가 있고, 이 인터페이스는RepositoryAinterface를 extends하였고,RepositoryAinterface는 Repository가 구현하고있으니RepositoryBInterface만 구현하면 되는거 아닌가요?그리고 이것은 SpringDataJpa가 해주고요Spring Data Jpa가 RepositoryAinterface에 대해 근본적으로 왜 알아야하는 궁금합니다. 근데 알아야 하니까 Impl을 붙어야 작동하겠죠?만약에 Impl이 없으면 어떠한 동작과정중에 에러가 생겨 동작을 제대로 하지 않는 것일까요..?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
addForm 페이지에 들어가면 오류가 발생합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]아래 코드는 addForm.html 코드이고<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="utf-8"> <link href="../css/bootstrap.min.css" th:href="@{/css/bootstrap.min.css}" rel="stylesheet"> <style> .container { max-width: 560px; } </style> </head> <body> <div class="container"> <div class="py-5 text-center"> <h2>상품 등록 폼</h2> </div> <h4 class="mb-3">상품 입력</h4> <form action="item.html" th:action method="post"> <div> <label for="itemName">상품명</label> <input type="text" id="itemName" name="itemName" class="form- control" placeholder="이름을 입력하세요"> </div> <div> <label for="price">가격</label> <input type="text" id="price" name="price" class="form-control" placeholder="가격을 입력하세요"> </div> <div> <label for="quantity">수량</label> <input type="text" id="quantity" name="quantity" class="form- control" placeholder="수량을 입력하세요"> </div> <hr class="my-4"> <div class="row"> <div class="col"> <button class="w-100 btn btn-primary btn-lg" type="submit">상품 등록</button> </div> <div class="col"> <button class="w-100 btn btn-secondary btn-lg" onclick="location.href='items.html'" th:onclick="|location.href='@{/basic/items}'|" type="button">취소</button> </div> </div> </form> th:onclick="|location.href='@{/basic/items}'|" type="button">취소</button> </div> <!-- /container --> </body> </html>package hello.itemservice.web.basic; import hello.itemservice.domain.item.Item; import hello.itemservice.domain.item.ItemRepository; import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import java.util.List; @Controller @RequestMapping("/basic/items") /** * basic/items로 get 방식으로 오면 @GetMapiing 메소드가 실행이 된다. */ @RequiredArgsConstructor /** * @RequiredArgsConstructor을 쓰면 * final이 붙은 멤버에게는 * @Autowired * public BasicItemController(ItemRepository itemRepository) { * this.itemRepository = itemRepository; * }라는 생성자를 자동으로 만들어준다. */ public class BasicItemController { /** * 1.BasicItempContorller가 스프링 빈에 등록이 되면서 * 2.생성자 주입으로 스프링 빈으로 등록되어 있는 ItempRpository가 스프링 빈에서 주입이 된다. * * 1.Spring 컨테이너 초기화: 애플리케이션이 시작될 때 Spring 컨테이너가 초기화되고 구성 파일을 로드합니다. * 이 때 @Autowired 어노테이션을 확인하고 의존성 주입을 준비합니다. * 2.빈 객체 생성: Spring은 컨테이너에서 관리하는 빈(bean) 객체를 생성합니다. * 빈 객체는 @Component, @Service, @Repository, @Controller 등과 같은 어노테이션으로 표시된 클래스들을 기반으로 생성됩니다. * 3.의존성 주입: @Autowired 어노테이션이 적용된 생성자, 필드 또는 메서드를 확인하고 해당 의존성을 주입합니다. * 이때, BasicItemController 클래스에 있는 @Autowired 어노테이션이 적용된 생성자가 호출되면서 ItemRepository의 인스턴스가 주입됩니다. * @Autowired란 스프링 컨테이너에 등록한 빈에게 의존관계주입이 필요할 때, * DI(의존성 주입)을 도와주는 어노테이션이다. 스프링 컨테이너에 빈들을 모두 등록한 후에, 의존성 주입 단계가 이루어진다. * 4.애플리케이션 실행: 모든 초기화 작업이 완료되면 Spring은 애플리케이션을 실행합니다. */ private final ItemRepository itemRepository; @GetMapping public String items(Model model){ List<Item> items = itemRepository.findAll(); model.addAttribute("items",items); return "basic/items"; // Return 되는 뷰 위치. } @GetMapping("/{itemId}") public String item(@PathVariable long itemId,Model model) { Item item = itemRepository.findById(itemId); model.addAttribute("item",item); return "basic/item"; } /** * 실제로 데이터를 넣는 것이 아닌 form만 보여준다. * * form을 열때는 get * 실제 저장을 할 떈 post 사용 * URL을 똑같게 지정한다. 이떄, 같은 URL로 오더라도 Get이나 post에 따라 addForm을 실행하거나 save를 실행한다. */ @GetMapping("/add") public String addForm(){ return "basic/addForm"; } /** * * addForm.html form에 있는 name과 변수명을 동일하게 해야한다. * 이 코드에서 @ModelAttribute 가 html 의 name 속성과 Item class 를 매칭시켜주고 * 그래서 itemRepository에 저장 로직에서 사용된다는 거까지는 이해했습니다 */ // @PostMapping("/add") public String addItemV1(@RequestParam String itemName, @RequestParam int price, @RequestParam Integer quantity, Model model){ Item item=new Item(); item.setItemName(itemName); item.setPrice(price); item.setQuantity(quantity); itemRepository.save(item); model.addAttribute("item",item); return "basic/item"; } // @PostMapping("/add") public String addItemV2(@ModelAttribute("item") Item item,Model model){ itemRepository.save(item); // model.addAttribute("item",item); return "basic/item"; } //@PostMapping("/add") public String addItemV3(@ModelAttribute Item item){ itemRepository.save(item); // model.addAttribute("item",item); return "basic/item"; } // @PostMapping("/add") public String addItemV4(Item item){ itemRepository.save(item); return "basic/addForm"; } /** * PRG - Post/Redirect/Get */ @PostMapping("/add") public String addItemV5(Item item) { itemRepository.save(item); return "redirect:/basic/items/" + item.getId(); } @GetMapping("/{itemId}/edit") public String editForm(@PathVariable Long itemId,Model model){ Item item = itemRepository.findById(itemId); model.addAttribute("item",item); return "basic/editForm"; } @PostMapping("/{itemId}/edit") public String edit(@PathVariable Long itemId,@ModelAttribute Item item){ itemRepository.update(itemId,item); // @ModelAttribute Item item라고 작성을 하면 item객체를 가져옴 return "redirect:/basic/items/{itemId}"; // 이렇게 리다이렉트로하면 PathVariable에 있는 것을 사용할 수 있음. //리다이렉션 부분 상품 수정 7분부터 다시 들어보기 이해안됨 /** * 상품명을 itemD로 변경하면 edit이 호출되고 http 상태가 302가 된다 * 이때, location은 items/2로 되는데 이것은 eidt의 결과가 리다이렉트라서 웹 브라우저가 2번으로 실제 item 2번으로 간다. */ } /** * 테스트용 데이터 추가 */ @PostConstruct public void init(){ itemRepository.save(new Item("itemA",1000,20)); itemRepository.save(new Item("itemB",2000,40)); } } 이것은 BasicItemController 코드입니다. 상품 등록 버튼을 누르면 위와 같은 오류가 발생합니다.그리고2023-09-18T23:32:41.550+09:00 ERROR 29201 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.thymeleaf.exceptions.TemplateProcessingException: Could not parse as expression: "/basic/items/add" (template: "basic/addForm" - line 17, col 30)] with root cause 라는 오류가 발생합니다.아무리 봐도 오류를 따라가서 수정을 해도 무엇이 문제인지 모르겠습니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
JdbcMemberRepository 와 JdbcTemplateMemberRepository 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]https://drive.google.com/file/d/1YQ9xwVxwzAN7xvYTOm0Jbky6vjB2e0cd/view?usp=share_link안녕하세요, repository 파일 내 JdbcMemberRepository 와 JdbcTemplateMemberRepository 가 지속적으로 implement 가 되지 않습니다. SpringConfig도 문제없고 데이터베이스도 실행중임을 확인하였는데, 무엇이 문제인지 여쭙습니다. 상단의 프로젝트 링크 참고 부탁드립니다.
-
미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
함수 관련 질의
안녕하세요.제네레이터 예제 강의듣다가 궁금한 점이 있어아래와 같은 코드를 작성해서 실행해보았는데요. 여기서 궁금한게, 제가 c라는 변수에 test함수의 결과를 반환했는데, 이때 c = test()를 실행했을때, 왜 test함수의 print('Called test')가 실행이 되는 건가요?해당 프로세스가 궁금합니다.
-
미해결스프링 핵심 원리 - 고급편
프록시 기능
프록시 주요 기능중접근제어 캐싱 지연로딩이건프록시 없이는 불가능한 기술인가요??프록시 기술이 꼭 필요한 기술인지 궁금해서요 !
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
3강 Spring Cloud Gateway - Custom Filter 적용 Bean 관련 질문있습니다.
안녕하세요 수업 잘 듣고 있습니다. 수업중 내용에 관해서 질문이 있어서 질문을 남깁니다. 수업 5분50초쯤에 Gateway Filter를 Bean으로 하나 등록한다고 하셨는데 @Component어노테이션이 붙은 클래스의 아래의 메소드의 반환값은 자동으로 Bean으로 등록되나요? @Bean어노테이션을 붙여줘야 등록이되는 줄 알았는데 제가 잘못이해하고있었는지 궁금해서 질문을 남깁니다.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
07-01 선택정렮
코드보다는 알고리즘의 사용이유입니다. sort()를 사용하면 간단하게 구현 할 수 있는데, 선택정렬을 사용하는 이유가 궁금합니다.
-
미해결Atlassian Jira & Confluence 관리자 교육 (Cloud 버전)
편집권한 없은 Epic의 하위에 Task 생성(Epic Link) 방법.
팀장이 메인업무 "Epic A" 생성 후, 팀원별로 자신의 업무를 관련 메인업무 "Epic A" 하위에 "Story B" / "Task C"로 생성하고자 합니다.해당 프로젝트의 권한에서 "이슈편집 = 팀장, 보고자"로 설정되어 -- "Epic A" 생성 : 팀장. 이슈편집 권한 : 팀장 -- "Story B"/"Task C" 생성: 팀원1, 이슈편집 권한 : 팀장, 팀원1와 같습니다. 이때, 팀원1이 "Epic A" 하위에 "Story B"를 생성했으나, "Epic A"와 Link 되지 못합니다. 하나의 큰 메인업무를 Epic으로 생성하고, 팀원별로 자신의 업무를 그 하위 이슈 (Epic Link)하고 싶은데, 방법이 없을까요? 모두에게 "이슈편집" 권한을 주면 해결이 되지만, 클릭시 편집모드로 변경.... 다른 사람의 이슈 잘못 수정 등의 사유로 .. 그 방법은 피하고자 합니다. Epic을 카테고리 분류 처럼 사용하려다 보니, 위와 같은 문제가 생겼습니다.
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
안녕하세요. Response 안쓰고 진행중입니다..
아래와 같이 코드를 작성했습니다. Response를 안쓰고 진행했는데 뉴스기사는 출력이 되지만 연예기사가 출력이 안됩니다 ㅠㅠ from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from bs4 import BeautifulSoup # 크롬 드라이버 자동 업데이트 from webdriver_manager.chrome import ChromeDriverManager import time import pyautogui import pyperclip import csv # 브라우저 꺼짐 방지 chrome_options = Options() chrome_options.add_experimental_option("detach", True) # 크롬창 안뜨게 함 chrome_options.add_argument('--headless') # headless 모드 활성화 chrome_options.add_argument('--disable-gpu') # GPU 가속 비활성화 # Mozilla 웹 브라우저에서 온 것처럼 인식 / 자동화된 요청을 감지하고 차단하는 것을 우회 chrome_options.add_argument("--user-agent=Mozilla/5.0") # 불필요 메세지 없애기 chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"]) # 드라이버 업데이트 service = Service(executable_path=ChromeDriverManager().install()) # 옵션 적용 browser = webdriver.Chrome(service=service, options=chrome_options) news = pyautogui.prompt('뉴스기사 입력 >>> ') print(f'{news} 검색') # 웹페이지 해당 주소 이동 path = f'https://search.naver.com/search.naver?where=news&sm=tab_jum&query={news}' # url 대화 browser.get(path) # 네이버에서 html 줌 html = browser.page_source soup = BeautifulSoup(html, 'html.parser') articles = soup.select("div.info_group") # 뉴스 기사 div 10개 추출 for article in articles: links = article.select("a.info") if len(links) >= 2: # 링크가 2개 이상이면 url = links[1].attrs['href'] # 두번째 링크의 href 추출 # 다시 한번 받아옴 browser.get(url) html = browser.page_source soup = BeautifulSoup(html, 'html.parser') # 연예뉴스라면 -> ? div 모양이 다름 if 'entertain' in url: title = soup.select_one(".end_tit") content = soup.select_one('#articeBody') else: title = soup.select_one("#title_area") content = soup.select_one('#dic_area') # 해당 링크 본문의 아이디값 가져옴 print("=============링크==========\n", url) print("=============제목==========\n", title.text.strip()) print("=============내용==========\n", content.text.strip()) time.sleep(0.7) print('\nDvlp.H.Y.C.Sol\n') 출력은 이렇게 나옵니다.=============링크========== https://n.news.naver.com/mnews/article/382/0001075938?sid=106Traceback (most recent call last): File "c:\Users\cksth\OneDrive\바탕 화면\Career\크롤링\심화\02.연예뉴스.py", line 71, in <module> print("=============제목==========\n", title.text.strip())AttributeError: 'NoneType' object has no attribute 'text