현존 최강 크롤링 기술: Scrapy와 Selenium 정복

현존 최강 크롤링 기술: Scrapy와 Selenium 정복

(36개의 수강평)

446명의 수강생
웹 크롤링ScrapySelenium
손용성 프로필

다음 영화 댓글 가져오기 크롤러 관련 질문 손용성 2일 전
안녕하세요, 제가 개인적인 실습 목적으로 아래와 같이 다음 사이트의 영화 메뉴에 있는 영화 댓글을 가져오는 크롤러를 작성했는데, 오류가 발생하여 문의 드립니다. 원래 의도는 인자로 'page_num'을 설정하여 숫자를 대입하면, 해당 숫자의 페이지까지 입력된 모든 댓글을 크롤링하는 것이었는데, 아래와 같이 코딩하고 보니 'page_num' 에 입력된 숫자의 페이지에만 있는 댓글을 가져오고 있습니다. (movie_id는 해당 영화 소개 페이지의 url에 있는 id 임)  더 이상 댓글이 없으면, break 함수를 이용하여 크롤링을 종료 시키게 되어 있습니다. 아마도 for 중첩문을 잘 못 작성한 것같은데, 무엇이 잘 못된 것인지 모르겠습니다. 도와 주시면 감사하겠습니다. def get_daum_news_comment(movie_id, page_num):          url_template = 'https://movie.daum.net/moviedb/grade?movieId={}&type=netizen&page={}'         url = url_template.format(movie_id, page_num)     resp = requests.get(url)     soup = BeautifulSoup(resp.text)            comments = ''     for page_num in range(1, page_num+1):              for p in soup.find_all('p', class_='desc_review'):             comments += p.get_text().strip()                           if not page_num:                 break                  return print(comments) 

1
Jmin J 프로필

incremental 라이브러리를 설치해도 계속 없다고 나와요ㅠ Jmin J 3일 전

1
손용성 프로필

'XPATH를 이용해서 크롤링하기' 강의 관련 문의 손용성 5일 전
안녕하세요,  'XPATH를 이용해서 크롤링하기' 강의 중  실전 예제1 '페이스북 로그인해보기' 실습 중  log_in 버튼 경로를 아래와 같이 코딩 후 크롤링 해보니 에러가 발생했습니다. login_button = "//*[@id='u_0_e']" 나중에 facebook 로그인 페이지를 개발자 도구로 검색해 보니  'u_0_e'의 마지막 문자인 'e'가 접속할 때 마다 동적으로 변경되는 것을 확인했습니다.  이런 경우는 어떻게 처리해야 정상적으로 크롤링이 작동될 수 있을까요?

2
Changhee Song 프로필

소스 코드 동작 Changhee Song 7일 전
오려주신 코드로 실행을 해보면  파일 생성은 되는데 0kb로 아무 내용이 없습니다.  설정 변경이 필요한 부분이 있을까요?

1
Jian 프로필

동적 웹페이지 크롤링 에러 관련 Jian 9일 전
안녕하세요! 크롤링 기초 부트캠프를 수강하고 이 수업을 재미있게 듣고 있습니다. 쉽게 따라갈 수 있게 강의해 주셔서 감사드립니다. 동적 웹페이지 관련 강의를 듣고 네이버 쇼핑에서 댓글 크롤링 하는 코드를 작성하였는데 계속 에러가 나서 며칠째 헤매다 문의드립니다.  네이버쇼핑에서는 더보기 버튼 대신에 페이지 번호를 클릭해야 합니다. 2페이지 버튼을 클릭하고 댓글을 읽어오는 코드를 작성하고 실행시켜도 계속 1페이지 있는 것만 읽혀오네요;;; 어떻게 해결할 방법이 없을까요?  감사합니다.

1
Jmin J 프로필

scrapy startproject ecommerce 썼는데 error가 뜨고 폴더 생성이 안돼요. Jmin J 9일 전
어떻게 해결할수 있을까요?

1
이준열 프로필

후속 강의 선택 문의 드립니다. 이준열 24일 전
안녕하세요. 중급 웹크롤링 강의를 재밌게 잘 듣고 있습니다. 개인적인 목표로, 크롤링 해온 내용들을 KoNLpy 등을 이용해서 분석해보고 싶은 생각이 있는데요 이 경우에는 강사님의 mySQL 강의를 듣는게 좋을지, 아니면 NoSQL을 듣는게 좋을지 추천 부탁드리겠습니다. 둘 다 들으면 좋겠지만 시간이 부족해서요..... 웹크롤링한 내용을 저장해서 분석하기 좋은 툴?을 다루는 강의가 둘 중 어느 것인지 알려주시면 바로 결제해서 이어서 수강하고자 합니다 ㅎㅎ 감사합니다!

1
blueberry 프로필

후속 과제 추천 blueberry 1달 전
안녕하세요 좋은 강의 정말 정말 감사드립니다. 너무 재미있고 유익하게 잘 듣고 있어요 강의를 거의 다 들어가는데, 혹시 제가 강의내용을 활용해서 해볼 수 있는 크롤링 프로젝트 3개 정도만 추천해주실 수 있으실까요? (당연히 제가 찾아서 하는게 가장 이상적이겠지만, 그래도 혹시 추천해주실 수 있으실까 해서 문의드립니다)

1
김정민 프로필

optoins.add_argument 관련 질문입니다 김정민 1달 전
User-Agent: ... 이걸 넣었을 때 생기는 문제인데요 아래 그림처럼 header를 인위적으로 주려고 파란부분을 모두 복사 후에 add_argument의 인자로 주면 코드를 동작시에 엄청 많은 불필요한 창들이 추가로 나오게 되는데 이유가 뭔가요? 그리고 파란 부분에서 딱 필요한 속성?들은 뭔지 알 수 있을까요?

1
김정민 프로필

ActionChains에 대해 질문입니다. 김정민 1달 전
ActionChains는 순차적인일을 처리하기위함이라고 나와있는데 그냥 ActionChains없이 코드를 순차적으로 쓰면 똑같은 일을 하게되는거아닌가요? ActionChains의 장점이 뭔지 와닿지가 않은데 설명 좀 해주실수 있을까요? 그리고 자동로그인 같은경우는 ActionChains를 쓰는게 낫나요?

2
김정민 프로필

headless chrome은 quit안해도되나요? 김정민 1달 전
headless chrome사용시에 혹시 quit()을 안해주면 저도 모르게 안보이는 크롬이 계속 안꺼지는 상태로 있는건가요? 아니면 코드가 끝나면 알아서 꺼지나요??

1
Seungmin Chu 프로필

for num, title in enumerate(titles): 이코드의 원리가 궁금합니다 Seungmin Chu 1달 전
기존에 for title titles: item = EcommerceItem() item['title'] = title yeild item  까지는 이해가 가는데  num, enumerate를 넣음으로서  titles = response.css('div.best-list li > a::text').getall() prices = response.css('div.best-list ul li div.item_price div.s-price strong span::text').getall() title 뿐만아니라 prices도 같이 yield가 되는게 어떤 원리인가요?

2
MimicRoom 프로필

강의에 사용하시는 파워포인트같은 프로그램 이름이 무엇인가요?? MimicRoom 1달 전
알려주세요ㅜ

1
hwoabaek 프로필

scrapy shell 오류 hwoabaek 2달 전
안녕하세요 윈도우10 cmd 으로 사용중입니다 scrapy shell 'http://corners.gmarket.co.kr/Bestsellers' 이렇게 하니까 아래와 같은 오류가 나옵니다 ecommerce폴더 안에 ecommerce폴더 안에서 실행한겁니다 문과라서 이런 오류 나오면 당황스럽네요 ㅠㅠ 2020-05-05 17:44:17 [scrapy.utils.log] INFO: Scrapy 2.1.0 started (bot: ecommerce) 2020-05-05 17:44:17 [scrapy.utils.log] INFO: Versions: lxml 4.5.0.0, libxml2 2.9.5, cssselect 1.1.0, parsel 1.5.2, w3lib 1.21.0, Twisted 20.3.0, Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 22:45:29) [MSC v.1916 32 bit (Intel)], pyOpenSSL 19.1.0 (OpenSSL 1.1.1g  21 Apr 2020), cryptography 2.9.2, Platform Windows-10-10.0.18362-SP0 2020-05-05 17:44:17 [scrapy.utils.log] DEBUG: Using reactor: twisted.internet.selectreactor.SelectReactor 2020-05-05 17:44:17 [scrapy.crawler] INFO: Overridden settings: {'BOT_NAME': 'ecommerce',  'DUPEFILTER_CLASS': 'scrapy.dupefilters.BaseDupeFilter',  'LOGSTATS_INTERVAL': 0,  'NEWSPIDER_MODULE': 'ecommerce.spiders',  'ROBOTSTXT_OBEY': True,  'SPIDER_MODULES': ['ecommerce.spiders']} 2020-05-05 17:44:17 [scrapy.extensions.telnet] INFO: Telnet Password: 1cdc2161cb05e638 2020-05-05 17:44:17 [scrapy.middleware] INFO: Enabled extensions: ['scrapy.extensions.corestats.CoreStats',  'scrapy.extensions.telnet.TelnetConsole'] 2020-05-05 17:44:18 [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'] 2020-05-05 17:44:18 [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'] 2020-05-05 17:44:18 [scrapy.middleware] INFO: Enabled item pipelines: [] 2020-05-05 17:44:18 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023 2020-05-05 17:44:18 [scrapy.core.engine] INFO: Spider opened 2020-05-05 17:44:18 [scrapy.downloadermiddlewares.robotstxt] ERROR: Error downloading <GET http://'http/robots.txt>: invalid hostname: 'http Traceback (most recent call last):   File "c:\python38\lib\site-packages\scrapy\core\downloader\middleware.py", line 44, in process_request     return (yield download_func(request=request, spider=spider)) ValueError: invalid hostname: 'http Traceback (most recent call last):   File "c:\python38\lib\runpy.py", line 193, in _run_module_as_main     return _run_code(code, main_globals, None,   File "c:\python38\lib\runpy.py", line 86, in _run_code     exec(code, run_globals)   File "C:\Python38\Scripts\scrapy.exe\__main__.py", line 7, in <module>   File "c:\python38\lib\site-packages\scrapy\cmdline.py", line 143, in execute     _run_print_help(parser, _run_command, cmd, args, opts)   File "c:\python38\lib\site-packages\scrapy\cmdline.py", line 98, in _run_print_help     func(*a, **kw)   File "c:\python38\lib\site-packages\scrapy\cmdline.py", line 151, in _run_command     cmd.run(args, opts)   File "c:\python38\lib\site-packages\scrapy\commands\shell.py", line 74, in run     shell.start(url=url, redirect=not opts.no_redirect)   File "c:\python38\lib\site-packages\scrapy\shell.py", line 45, in start     self.fetch(url, spider, redirect=redirect)   File "c:\python38\lib\site-packages\scrapy\shell.py", line 112, in fetch     response, spider = threads.blockingCallFromThread(   File "c:\python38\lib\site-packages\twisted\internet\threads.py", line 122, in blockingCallFromThread     result.raiseException()   File "c:\python38\lib\site-packages\twisted\python\failure.py", line 488, in raiseException     raise self.value.with_traceback(self.tb) ValueError: invalid hostname: 'http 오류 문구가 여기까지 입니다

2
dksdbqls23 프로필

ul li 관련해서 크롤링 방식에 있어서 질문드립니다. dksdbqls23 2달 전
만약 <ul ~~~>   <li ~~~>     <h3 ~~~>글제목1     <p ~~~> 글내용1-1     <p ~~~> 글내용1-2   <li ~~~>     <h3 ~~~> 글제목2     <p ~~~> 글내용2-1     <p ~~~> 글내용2-2     <p ~~~> 글내용2-3 과 같이 글내용 개수가 다른 경우 css selector로 h3태그, p태그를 각각 검색했을 때 데이터 가공을 위해 페어를 맞출 때에 많은 어려움이 있습니다. 이런 경우 어떤 방법으로 해결하면 좋은가요?

1
지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스