수강이 제한됩니다.
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
[REST API] data의 교환방식 질문
- 본 강의 영상 학습 관련 문의에 대해 답변을 드립니다. (어떤 챕터 몇분 몇초를 꼭 기재부탁드립니다)- 이외의 문의등은 평생강의이므로 양해를 부탁드립니다- 현업과 병행하는 관계로 주말/휴가 제외 최대한 3일내로 답변을 드리려 노력하고 있습니다- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.<동적 웹사이트와 크롤링> - REST API 안녕하세요. 강의 잘 듣고 있습니다.REST API라고 하는 것이 데이터를 주고 받는 방법인 것은 알겠는데요. 이것이 프론트엔드와 백엔드의 데이터를 주고받는 방식이라고 이해하는게 좀 어려워서 부가설명을 부탁드립니다. 회사를 기준으로 이해하다보니 더 와닿지 않습니다. 제가 가끔씩 보는 사내의 IT개발은 JSP로된 2000줄 정도 되는 코드에 어떤 데이터가 필요하면, 데이터를 뽑는 쿼리를 데이터 베이스 담당하시는분한테 묻고 그 해당 쿼리를 집어넣고??하는 방식으로 하는 것 같은데, 제가 집에서하는 템플릿 코드 작성방식과와 다르지 않다고 이해해오고 있는데요. 규모가 큰 회사에서는 OPEN API 설명서처럼 백엔드에서DATA를 전달하는 방식을 구현해 놓는건가요? 그리고 한가지만 더 질문을 드리면, 제가 Flask 강의도 듣고 있는데요. 사실 백엔드와 프론트엔드의 차이를 잘 느끼지 못했습니다. 하나의 템플릿에 데이터를 넣어주는 역할까지를 백엔드가 하고 단지 프론트는 그 템플릿을 예쁘게 하는 역할을 하는것인가요? 만약 그렇다면 템플릿 상속도 있고, HTML CODE도 계속해서 변하는데 구분없이 혼자하는게 더 수월하겠다는 생각이 들어서요. 어떤 식으로 역할을 분배하고 일하는지 궁금합니다.정말 좋은 강의 잘듣고 있습니다. 감사합니다!
- 미해결쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
headless chrome 오류 문의
안녕하세요 headless chrome 오류 문의 드립니다.위 코드 실행 시..WebDriverException: Message: unknown error: Chrome failed to start: was killed. 오류문구가 뜨는데크롬 드라이버 이슈가 있는 걸까요???크롬, 크롬드라이버는 110버전으로 사용하고 있습니다.추가로 셀레니움은 잘됩니다!!
- 미해결쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
Selenium 처리 속도 관련 문의드립니다.
연습1 모범 코드: id가 begin 인 데이터만 출력해보기 코드를 실행해보면,데이터 출력까지 꼬박 30초가 걸리네요..from selenium import webdriverfrom selenium.webdriver.common.keys import Keysimport timefrom selenium.webdriver.common.by import Byfrom selenium.webdriver.chrome.service import Servicefrom webdriver_manager.chrome import ChromeDriverManagerchromedriver = 'C:/dev_python/Webdriver/chromedriver.exe'driver = webdriver.Chrome(service=Service(chromedriver))driver.get("https://davelee-fun.github.io/blog/crawl_html_css.html")elems = driver.find_elements(By.ID, 'begin')for elem in elems : print(elem.text)driver.quit() 강사님 영상보면 늦어도 5초 이내에 실행되는 것 같은데 좀 답답한 마음에 문의 드립니다.data:, 화면에서 20초 가량을 멈춰있어요..구글링 해보니 브라우저와 드라이버 버전을 맞추면 실행이 빨라진다 해서, 몇 번 재설치를 해봐도 안되고 있네요..109.0.5414.25와 .74 모두 설치해봤으나 동일한 처리 속도이며,,Edge드라이버를 설치해서 불러와도 30초가 걸리네요.참고로 제가 사용하는 컴퓨터이며, 크롬에서 주소 입력시 1초 이내로 반응합니다. 강의 내용과는 조금 벗어날 수도 있는 부분인 것 같으나..현업이나 교육 중에 이런 현상을 보신 적이 있으실까 싶어서 여쭤보네요.강의는 정말 잘 듣고 있습니다.양질의 강의 찍어주셔서 정말 감사드려요!!^^
- 미해결쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
동적 웹사이트에서 element가 선택되지 않는 문제에 관해 질문드립니다
안녕하세요~동적 웹사이트에 대한 강의를 듣고 동적 웹페이지라는 개념은 이해가 됐는데, 실습을 하는 중에 동적 html과 관련된 듯한 문제에 실제로 직면하니 당최 해결이 안 되어 질문드려 봅니다.네이버 댓글 작성자의 이전 댓글도 수집해보려고 작성자 아이디를 클릭하면 개발자 도구에서 새로운 script가 생성됩니다. 동적 html인가 보다 하고 스크래핑을 하려 했으나 이 놈의 element가 셀레니움 메서드로 선택되지가 않습니다.아래 첨부한 그림에서처럼, 유저 아이디를 클릭하면 개발자 도구에 나타나지 않던 section이 새롭게 나타나고 저 안에 이 유저의 지난 댓글에 관한 html 정보가 있는데, 셀레니움 find 계열 메서드를 사용하면 아무 것도 걸리지 않는 걸로 볼 때 selenium이 저 동적 html을 아직 인식하지 못한 상태인 것 같습니다.원래는 기사에 달린 댓글 자체도 셀레니움의 메서드로 선택되지 않다가 구글링으로 iframe 때문인 걸 발견해서 이 문제는 해결했거든요. 이 문제도 제가 알지 못하는 동적 html 구성 방식?과 관련이 있는 듯 한데 실마리조차 찾기가 힘드네요 ㅜㅜ짚이시는 점이라도 알려주시면 넘 감사하겠습니다~!최초 개발자 도구 화면----------------------------------------------------------------------------------------------아이디 클릭 후 개발자 도구 화면
- 미해결쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
webdriver manager
안녕하세요 선생님! 지난 강의에 이어서 잘 듣고 있습니다.webdriver manager이 설치는 잘 되었는데요.!pip list로도 설치된 패키지로 나오고요. webdriver_manager로도 설치해보고,인터넷 검색 결과에 따라 webdriver-manager로도 설치해봤는데, import를 하려고 하면 이런 모듈은 없다고 나오네요.이상한 것이 webdriver_manager로 설치하던, webdriver-manager로 설치하든지 모듈의 버전을 확인하면,둘 다 모두 ‘webdriver-manager’로 나온다는 것입니다. 하지만, import를 할때 -를 사용하면 문법상 안맞다는 에러가 나서, webdriver_manager로만 import를 하고 있는데요. 물론 -를 아예빼고도 해봤고요. 전부 없는 모듈로 나옵니다. 설치는 잘됐고 버전도 보이는데, import가 안되는 게 저도 너무 의아스럽네요. 3시간 동안 헤매다가 선생님 도움을 구합니다. - 본 강의 영상 학습 관련 문의에 대해 답변을 드립니다. (어떤 챕터 몇분 몇초를 꼭 기재부탁드립니다)- 이외의 문의등은 평생강의이므로 양해를 부탁드립니다- 현업과 병행하는 관계로 주말/휴가 제외 최대한 3일내로 답변을 드리려 노력하고 있습니다- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
- 미해결쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
__init__() got an unexpected keyword argument 'service' 에러 질문드립니다.
강사님, 안녕하세요:)강사님의 열렬한 팬인 수강생입니다! 강의 정말 잘 듣고 있습니다. 이번에 셀레니움 버전 업그레이드가 되었다고 말씀 주신 후, 저도 현재 구글드라이버 버전인 104 크롬드라이버를 교체 후 코드를 작동시키니 __init__() got an unexpected keyword argument 'service' 이런 에러가 나왔습니다.. 셀레니움 버전 문제인 것 같은데, 구글링을 진행해도 명쾌하게 찾지 못하는 상황입니다. 혹시 이 부분에서 답변을 받을 수 있을까요?답변 주시면 정말 감사합니다.
- 미해결쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
Jupiter NoteBook 파일과 PDF 파일은 어디서 다운로드 받을 수 있나요?
강의 중간에 자료를 다운로드 받을 수 있는 것으로 안내해주셨는데, Jupiter NoteBook 파일과 PDF 파일은 어디서 다운로드 받을 수 있나요?
- 해결됨쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
scrapy option질문
안녕하세요 우선 scrapy관련 강의 감사합니다 질문1)아래 option -o와 -t는 어떤약자이며 기능이 어떻게될까요?? 공식 문서 사이트나 구글링해도 잘안나와서 질문드립니다 object와 type인가요?? 질문2) yield와 return의차이?? scrapy를 사용하면서 처음으로 yield라는 함수를써봤습니다 강의중 말씀하신 병렬 쓰레드처리? 때문에 return이아닌 yield를 사용해야 되는 걸까요?? yield는 보통 어떤 경우에 사용하는지 궁금합니다
- 미해결쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
response.css 질문드립니다.
response.css('head > title').get() 명령어를 입력하면 title 밑 meta 부분까지 가져와지는데 왜 그런건가요?
- 미해결쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
scrapy 크롤링 수행시 ffi.callback() 에러가 발생합니다
안녕하세요? 강의 잘 듣고 있습니다 강의 초반부에 크롤링을 수행하면 (scrapy crawl gmarket) 다음과 같은 에러가 계속해서 발생합니다. 2022-07-06 08:10:41 [scrapy.downloadermiddlewares.robotstxt] ERROR: Error downloading <GET http://www.gmarket.co.kr/robots.txt>: Cannot allocate write+execute memory for ffi.callback(). You might be running on a system that prevents this. For more information, see https://cffi.readthedocs.io/en/latest/using.html#callbacks 항상 발생하는 것은 아니구요, 10번중에 8번정도 발생하면서 크롤링이 실패합니다. 나머지 2번은 또 크롤링이 잘 수행되네요. 제 사용환경은 m1 mac이구요 https://github.com/pyca/pyopenssl/issues/873 여기서 파이썬 버전을 3.10.2로 바꾸면 된다고 해서 미니콘다로 파이썬 버전을 3.10.2나 최신버전으로 변경시켜봤는데 여전히 에러가 발생합니다.. 혹시 해결방법이 있을까요? 추가)url이 다음과 같을 때는 에러 없이 잘 작동합니다.. start_urls = [ 'http://promotion.gmarket.co.kr/Event/CouponZone.asp' ]
- 미해결쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
selenium으로 여러페이지 수집시 질문
안녕하세요 selenium을 활용하여 페이지의 여러페이지 수집을 하려던 중 궁금사항이 있어서 글을 남깁니다. selenium과 beautifulsoup을 활용하여 여러페이지 게시글 정보를 수집하려고 하던 중 게시물 A 정보a(분류), 정보b(지역), 정보c(주소) 게시물 B 정보a(분류), 정보b(지역), 정보d(이용요금) 게시물 C 정보a(분류), 정보b(지역), 정보c(주소) 게시물 D 정보a(분류), 정보b(지역), 정보f(홈페이지) => 게시물에서 분류, 지역, 주소 정보를 가지고 올려고 하였으나.. 사이트 구조상 각 컬럼별로 인덱스번호를 지정하여 가지고 와야 하는 구조!(개별적으로 정보수집이 안됨) 떄문에 주소가 아닌 B게시물에서는 이용요금, 게시물 D에는 홈페이지정보가 수집이 되어버립니다. 예를 들면... ex) 분류 = soup.select()[0].text, 지역 = soup.select()[1].text, 주소 = soup.select()[2].text 물론 이용요금과 홈페이지정보를 예외처리하고 주소가 아니면 공백으로 남기게금 해볼려고 하였으나.. 잘 안되더라구요..ㅠㅠ 이처럼 데이터가 균일하게 들어있지 않은 여러 페이지 게시물 정보를 수집할려고 할때 어떤 알고리즘과 로직으로 처리해야할까요?
- 미해결쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
연습6 모범 코드: 로그인 시나리오 해보기
안되시는 분들 아래 코드로 해보시면 좋을듯합니다. Set of supported locator strategies. CLASS_NAME = 'class name' CSS_SELECTOR = 'css selector' ID = 'id' LINK_TEXT = 'link text' NAME = 'name' PARTIAL_LINK_TEXT = 'partial link text' TAG_NAME = 'tag name' XPATH = 'xpath' from selenium import webdriver from selenium.webdriver.common.keys import Keys import time # 드라이버 생성 # chromedriver 설치된 경로를 정확히 기재해야 함 chromedriver = 'C:/dev_python/Webdriver/chromedriver.exe' # 윈도우 #chromedriver = '/usr/local/Cellar/chromedriver/chromedriver' # 맥 driver = webdriver.Chrome(chromedriver) # 크롤링할 사이트 호출 driver.get("https://davelee-fun.github.io/blog/TEST/index.html") #<input id="username" type="text" name="username" placeholder="아이디"> elem_id = driver.find_element("name","username") elem_id.clear() elem_id.send_keys("error@error.com") time.sleep(1) #<input id="password" type="password" name="password" placeholder="비밀번호"> elem_pw = driver.find_element("name","password") elem_pw.clear() elem_pw.send_keys("1234") time.sleep(1) #<input type="submit" value="로그인"> elem_button = driver.find_element("css selector", "input[type='submit']") elem_button.send_keys(Keys.RETURN) #elem_button.click() time.sleep(2) elem = driver.find_element("class name", "news") print (elem.text) time.sleep(2) driver.quit()
- 미해결쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
셀레니움 문법 업그레이드 , find_element_by_tag_name 오류
공유하려고 글씁니다. (질문에 남겨야지, 이 강의 수강하시는분들이 볼수있기때문에, 질문에 글 남깁니다.) 방금 공부하는도중에 아무리봐도 오타가 없는데 find_element_by_tag_name('h1') 이 안되네요 구글링해서 찾아보니 셀레니움 문법이 업그레이드 되었다고합니다. 몇시간을 헤맨건지.. 참고로 이렇게 쓰면 됩니다 elem = driver.find_element(By.TAG_NAME, "h1") find_element_by_tag_name => find_element 위와 같이 문법 변경 되었습니다. 데이브리 선생님께 항상 감사드립니다.
- 해결됨쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
셀레니움 버전 변경으로 인한 코드 변경
06:00부에서 오류가 생겨서 찾아보았음. 기존 강의에서는 elems = driver.find_elements_by_id('begin')이 정상적으로 작동되었으나 셀레니움 버전 4.3.0(최신버전)부터는 "find_element_by_* & find_elements_by"를 제거하였다. 따라서 아래와 같은 코드를 쓰면 정상 작동될 것이다. elems = driver.find_elements("id", "begin") 전체코드 from selenium import webdriver from selenium.webdriver.common.keys import Keys import time # 드라이버 생성 # chromedriver 설치된 경로를 정확히 기재해야 함 chromedriver = 'C:\dev_python\Webdriver/chromedriver.exe' # 윈도우 #chromedriver = '/usr/local/Cellar/chromedriver/chromedriver' # 맥 driver = webdriver.Chrome(chromedriver) # 크롤링할 사이트 호출 driver.get("https://davelee-fun.github.io/blog/crawl_html_css.html") time.sleep(1) # 여기에 작성해보세요 elems = driver.find_elements("id", "begin") for index in elems: print(index.text) driver.quit() 혹시나 헤매시는 분들을 위해 끄적여 봅니다.
- 미해결쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
headless error
안녕하세요. 강의를 듣고 코드를 작성했습니다. 그런데 typeError가 발생했습니다. 구글링을 해보고 스택오버플로우에서 찾아보고 글을 남겼지만 해결이 되지 않아 여쭤봅니다. 강의 시간은 8:18입니다. 현재 크롬은 최신업데이트하였고 드라이버 경로도 확인했습니다. 에러 메세지는 아래와 같습니다. TypeError Traceback (most recent call last) Input In [20], in <cell line: 6>() 4 headlessoptions.add_argument('headless') 5 chromedriver = 'C:/dev_python/Webdriver/chromedriver.exe' ----> 6 driver = webdriver.Chrome(chromedriver, options=headlessoptions ) 7 driver.get('https://davelee-fun.github.io/') 9 elem = driver.find_element_by_tag_name("h1") TypeError: __init__() got an unexpected keyword argument 'options' 아래는 작성한 코드입니다. from selenium import webdriver headlessoptions = webdriver.ChromeOptions() headlessoptions.add_argument('headless') chromedriver = 'C:/dev_python/Webdriver/chromedriver.exe' driver = webdriver.Chrome(chromedriver, options=headlessoptions) driver.get('https://davelee-fun.github.io/') elem = driver.find_element_by_tag_name("h1") print (elem.text) driver.quit()
- 미해결쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
질문있습니다!
강력/최신 크롤링 기술: Scrapy spider 크롤링 기법 강의에서 4분쯤에 지마켓 크롤링한것 처럼 무신사 홈페이지를 크롤링 해봤는데 안되서 질문드립니다. import scrapy class MusinsaRankSpider(scrapy.Spider): name = 'musinsa_rank' allowed_domains = ['www.musinsa.com/ranking/best'] start_urls = ['https://www.musinsa.com/ranking/best/'] def parse(self, response): ranks = response.css("div.li_inner > div.article_info > p.list_info > a::text").getall() for rank in ranks: print(rank) 이렇게 코드를 작성하고 터미널 환경에서 crawl을 했는데 C:\Users\JOONIOR\scrapyproject\musinsa\musinsa>scrapy crawl musinsa_rank 2022-06-29 10:41:30 [scrapy.utils.log] INFO: Scrapy 2.6.1 started (bot: musinsa) 2022-06-29 10:41:30 [scrapy.utils.log] INFO: Versions: lxml 4.6.3.0, libxml2 2.9.12, cssselect 1.1.0, parsel 1.6.0, w3lib 1.22.0, Twisted 22.4.0, Python 3.9.7 (default, Sep 16 2021, 16:59:28) [MSC v.1916 64 bit (AMD64)], pyOpenSSL 21.0.0 (OpenSSL 1.1.1l 24 Aug 2021), cryptography 3.4.8, Platform Windows-10-10.0.22000-SP0 2022-06-29 10:41:30 [scrapy.crawler] INFO: Overridden settings: {'BOT_NAME': 'musinsa', 'FEED_EXPORT_ENCODING': 'utf-8', 'NEWSPIDER_MODULE': 'musinsa.spiders', 'ROBOTSTXT_OBEY': True, 'SPIDER_MODULES': ['musinsa.spiders']} 2022-06-29 10:41:30 [scrapy.utils.log] DEBUG: Using reactor: twisted.internet.selectreactor.SelectReactor 2022-06-29 10:41:30 [scrapy.extensions.telnet] INFO: Telnet Password: e6cbf7235634cbaa 2022-06-29 10:41:30 [scrapy.middleware] INFO: Enabled extensions: ['scrapy.extensions.corestats.CoreStats', 'scrapy.extensions.telnet.TelnetConsole', 'scrapy.extensions.logstats.LogStats'] 2022-06-29 10:41:30 [scrapy.middleware] INFO: Enabled downloader middlewares: ['scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware', 'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware', 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware', 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware', 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware', 'scrapy.downloadermiddlewares.retry.RetryMiddleware', 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware', 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware', 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware', 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware', 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware', 'scrapy.downloadermiddlewares.stats.DownloaderStats'] 2022-06-29 10:41:30 [scrapy.middleware] INFO: Enabled spider middlewares: ['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware', 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware', 'scrapy.spidermiddlewares.referer.RefererMiddleware', 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware', 'scrapy.spidermiddlewares.depth.DepthMiddleware'] 2022-06-29 10:41:30 [scrapy.middleware] INFO: Enabled item pipelines: [] 2022-06-29 10:41:30 [scrapy.core.engine] INFO: Spider opened 2022-06-29 10:41:31 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 2022-06-29 10:41:31 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023 2022-06-29 10:41:31 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.musinsa.com/robots.txt> (referer: None) 2022-06-29 10:41:31 [scrapy.downloadermiddlewares.robotstxt] DEBUG: Forbidden by robots.txt: <GET https://www.musinsa.com/ranking/best/> 2022-06-29 10:41:31 [scrapy.core.engine] INFO: Closing spider (finished) 2022-06-29 10:41:31 [scrapy.statscollectors] INFO: Dumping Scrapy stats: {'downloader/exception_count': 1, 'downloader/exception_type_count/scrapy.exceptions.IgnoreRequest': 1, 'downloader/request_bytes': 229, 'downloader/request_count': 1, 'downloader/request_method_count/GET': 1, 'downloader/response_bytes': 503, 'downloader/response_count': 1, 'downloader/response_status_count/200': 1, 'elapsed_time_seconds': 0.329829, 'finish_reason': 'finished', 'finish_time': datetime.datetime(2022, 6, 29, 1, 41, 31, 379516), 'httpcompression/response_bytes': 152, 'httpcompression/response_count': 1, 'log_count/DEBUG': 3, 'log_count/INFO': 10, 'response_received_count': 1, 'robotstxt/forbidden': 1, 'robotstxt/request_count': 1, 'robotstxt/response_count': 1, 'robotstxt/response_status_count/200': 1, 'scheduler/dequeued': 1, 'scheduler/dequeued/memory': 1, 'scheduler/enqueued': 1, 'scheduler/enqueued/memory': 1, 'start_time': datetime.datetime(2022, 6, 29, 1, 41, 31, 49687)} 2022-06-29 10:41:31 [scrapy.core.engine] INFO: Spider closed (finished) 터미널에 이렇게만 나오고 제가 원하던게 안나오더라구요 혹시 css selector가 잘못되었나 싶어 주피터 노트북에서 beatifulsoap로 해봤는데 잘 나왔습니다. 혹시 이유를 알 수 있을까요 크롤링 사이트는 이거입니다.https://www.musinsa.com/ranking/best
- 미해결쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
안녕하세요 선생님! 질문있습니다.
웹 크롤링 관련해서 강의 너무 잘해주셔서 감사합니다! 다름이 아니라 웹이 아니라 앱크롤링은 대략 어떤 과정을 거쳐 진행하게되나요? 앱크롤링은 자료가 그렇게 많지는 않은 것 같아서 힌트를 얻을 수 있을까해서 질문드립니다. 감사합니다~!
- 미해결쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
selenium&scrapy문의
- 본 강의 영상 학습 관련 문의에 대해 답변을 드립니다. (어떤 챕터 몇분 몇초를 꼭 기재부탁드립니다)- 이외의 문의등은 평생강의이므로 양해를 부탁드립니다- 현업과 병행하는 관계로 주말/휴가 제외 최대한 3일내로 답변을 드리려 노력하고 있습니다- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요, 우선 다른 강의에 질문을 드리는 점 죄송스럽게 생각합니다. 현재 듣고 있는 중급 selenium&scrapy는 질문창이 닫혀있더라구요.. 크롤링 고급 강좌도 결제해두고 중급 부터 듣고 있는 상황입니다. 고민도, 검색도, 질문도 여러 군데 해보았지만 답변을 찾지 못해 부득이 질문 올립니다. 강좌는 이미 펼쳐져있는 댓글 창에서 '더보기'를 누르고 추가적으로 크롤링을 하는 코드를 알려주었는데요, 기존 강좌 제작 시점과 달리 댓글은 기본적으로 닫혀 있고 on/off 버튼을 눌러야 댓글이 보이게 됩니다. 강의 활용해서 on_button 변수를 만들고, 이를 클릭할 수 있도록 한 번 꾸며 봤는데요, 태그도 바꿔보고, 함수도 바꿔보고, 다양한 방법으로 시도를 해봤는데, On/Off 버튼을 누르는 것을 못합니다 ㅠ 태그도 div.cmt_count_box까지만 해보고, button까지도 해보고, span까지도 해보고, 다양한 방법으로 시도 해봤습니다. on_button = driver.find_element_by_css_selector('alex-area > div > div > div > div.cmt_count_box > button') webdriver.ActionChains(driver).click(on_button).perform() 아무래도 눈으로 보고 직접 체득해야 실력이 Up되지 않을까 해서 강의만 보고 넘어가기 보다는, 한 번 직접 구현해보고 싶어 문의 드리고자 합니다. 기초 강의 때에는 조금씩 페이지가 바뀌는 부분도 고민해서 넣다보면 어느순간 해결이 되었는데, 나름 중급이라 조금 어렵네요 ㅎㅎ 도움 부탁 드려 보겠습니다! [작성코드] from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException import time chromedriver = '/usr/local/chromedriver' driver = webdriver.Chrome(chromedriver) driver.get('https://news.v.daum.net/v/20190709165157301?d=y') #댓글창 On/Off 버튼 누르기 - 게속 안됨 ㅠ element = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'alex-area > div > div > div > div.cmt_count_box > button'))) on_button = driver.find_element_by_css_selector('alex-area > div > div > div > div.cmt_count_box > button') webdriver.ActionChains(driver).click(on_button).perform() #더보기 누르기 로직 만들기 loop, count = True, 0 while loop and count < 10: try: element = WebDriverWait(driver, 5).until( EC.presence_of_element_located((By.CSS_SELECTOR, 'alex-area > div > div > div > div.cmt_box > div.alex_more > button')) ) more_button = driver.find_element_by_css_selector('alex-area > div > div > div > div.cmt_box > div.alex_more > button') webdriver.ActionChains(driver).click(more_button).perform() count = count + 1 #count += 1로도 가능 time.sleep(2.0) except TimeoutException : loop = False #크롤링하기 comment_box = driver.find_element_by_css_selector('alex-area > div > div > div > div.cmt_box > ul.list_comment') comment_list = comment_box.find_elements_by_tag_name('li') #각각 댓글은 li가 감싸고 있음 for num, comment_item in enumerate(comment_list) : print("[",+str(num+1),+"]", comment_item.find_element_by_css_selector('div p').text) driver.quit() #alex-area > div > div > div > div.cmt_count_box > button > span <- on/off #alex-area > div > div > div > div.cmt_box > div.alex_more > button > span:nth-child(1) <- 더보기버튼 #alex-area > div > div > div > div.cmt_box > ul.list_comment <- 댓글리스트
- 미해결쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
아래분(phantele47)과 동일한 문제가 발생해서 문의드립니다.
다른 분의 질문과 같이 json.loads(response.body_as_unicode())에서 문제가 발생하는 것을 보입니다. 이전 단계(print(response.text))에서는 문제가 발생하지 않았습니다. 그런데 다음으로 특정 item 관련 data를 획득하기 위한 단계에서 문제가 발생하였습니다. <AttributeError: 'TextResponse' object has no attribute 'body_as_unicode'>란 메세지가 보이네요. 나름 문제 해결을 위해서 구글링도 해보고 있는데 아직 정확한 해결책을 찾지 못했습니다. 더 고민해 봐야할 테지만 저만의 문제가 아닌 듯하여 일단 질문드립니다. 답변이 가능하시다면 답변 부탁드립니다. 감사합니다.
- 해결됨쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
ip 차단을 피하려면 어떻게 해야 하나요?
안녕하세요~ 직접 웹크롤링을 진행하며 필요한 부분만 들어서 크롤링 기초 부트캠프만 듣고 아직 이 강좌의 영상은 시청하지 못했지만, 현재 제가 당면한 문제이기도 하고 웹크롤링에서 주요한 이슈 중 하나인 것도 같아 질문드려 봅니다. 웹크롤링을 시도하다 계속 ip를 차단 당하고 있는데, 어떤 방법으로 이 차단을 피해갈 수 있을까요? ㅜㅜ 온라인 게시글을 크롤링하고 싶은데 글 한 개 스크래핑 후 잠시 멈춤 시간을 둬도 어느 정도 진행되다 계속 차단당하네요 ㅠ 관련 정보를 검색하다 user agent를 변경하는 방법까지는 적용해봤는데 그래도 여전히 2페이지 정도의 게시글을 크롤링 하고 나면 차단 당하고 하네요.. 웹크롤링 방법을 익혀도 웹크롤링을 막는 장애물들 때문에 웹크롤링에 실패할 때가 있어서 이런 장애물들을 피해갈 수 있는 방법도 중요한 것 같습니다. 강의 목차만 봤을 때는 웹크롤링 방해 또는 장애물에 관한 내용을 다루는 영상이 없는 것 같아 일단 질문드렸는데, 혹시 관련 내용을 다루는 영상이 있다면 무작정 질문드려 죄송하고, 어느 영상인지 알려주심 감사하겠습니다~!