수강이 제한됩니다.
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결현존 최강 크롤링 기술: Scrapy와 Selenium 정복
SELENIUM 과 SCRAPY 의 사용과 관련하여 문의 드립니다.
scrapy 프레임워크 정말 감사합니다. selenium을 하다 보면 처리 속도가 문제가 되는데 이 부분에 대해 많은 도움이 되었읍니다. 하지만 scrapy 에서도 한가지 단점이 있는데 사용자가 입력해야 하는 부분의 처리 입니다. 이를 위해 selenium과 scrapy를 결합한 형태로 사용해야 할 거 같은데 이 경우에도 scrapy의 장점을 취할 수 있는지 궁금합니다. 가능하시면 양 솔루션의 장점을 같이 얻을 수 있는 예제 샘플 제공해 주시면 너무 감사하겠습니다. 강사님 덕분에 그동안 어려웠던 부분 많이 해결하고 있습니다. 아울러 적은 비용으로 수준높은 지식을 주시는 강사님 감사합니다. 늘 많은 지식 주시고 항상 발전 있으시길 기원 드립니다.
- 미해결현존 최강 크롤링 기술: Scrapy와 Selenium 정복
ori_price와 dis_price 대체문제
def parse_main_category(self, response): print('Parse_main_category', response.meta['maincategory_name']) best_items = response.css('div.best-list') for index, item in enumerate(best_items[1].css('li')): title = item.css('a.itemname::text').get() ori_price = item.css('div.o-price::text').get() dis_price = item.css('div.s-price strong span span::text').get() dis_percent = item.css('div.s-price em::text').get() if ori_price == None: ori_price = dis_price ori_price = ori_price.replace(',', '').replace('원', '') dis_price = dis_price.replace(',', '').replace('원', '') if dis_percent == None: dis_percent = '0%' print(title, ori_price, dis_price, dis_percent) 선생님 다음과 같이 코드를 입력하면 [디키즈](광주신세계)디키즈 여름이월특가상품 (DMQ2UTST) 15200 15200 20% 매니몰/M-3XL 남여공용/맨투맨/기모후드집업 12900 12900 70% [미센스]봄 시즌오프 ~92%세일 + 최대20%쿠폰 14900 14900 59% 이런 식으로 ori_price와 dis_price의 가격차이가 나질 않는데 어떻게 해야 해결할 수 있을지 궁금합니다.
- 미해결현존 최강 크롤링 기술: Scrapy와 Selenium 정복
title과 price의 매치가 안됩니다.
선생님 안녕하세요. 선생님이 알려주신 코드대로 title과 price를 맞춰보려고 했지만 enumerate로 돌려보면 list에서 out of range라는 에러가 발생합니다. 그래서 지금은 이게 최선인데 제가 이상하게 짠 것인지 여쭙고 싶습니다. # -*- coding: utf-8 -*- import scrapy from gmarket.items import GmarketItem class GmSpider(scrapy.Spider): name = 'gm' allowed_domains = ['corners.gmarket.co.kr/Bestsellers'] start_urls = ['http://corners.gmarket.co.kr/Bestsellers'] def parse(self, response): titles = response.css('div.best-list > ul > li> a::text').getall() prices = response.css('div.item_price > div.s-price > strong > span > span::text').getall() item = GmarketItem() item['price'] = prices item['title'] = titles yield item
- 미해결현존 최강 크롤링 기술: Scrapy와 Selenium 정복
scrapy와 BeatifulSoup
강의를 듣다가 질문드립니다. 강의내용 중 언급하신 예제말고, gmarket에서 다른 것들을 crawl 하는 중에, 안되는 것이 있어, html코드를 살펴보니, 지난강의에서 언급하신 동적/정적 크롤의 차이에서 발생한듯한데.. 그럼 scrapy는 selenium과 같이 동적인 부분의 크롤링은 할 수 없는건가요? 그렇다면 scrapy는 그 사용분야/범위(?)가 selenium 보다 BeautifulSoup과 더 비슷하다고 할 수 있는건가요?
- 미해결현존 최강 크롤링 기술: Scrapy와 Selenium 정복
오류 질문
강의 내용을 따라가다가, gmarket을 scrapy하면 response.text가 안나오고 아래와 같은 에러가 나옵니다. 잘은 모르겠으나, 아마도 가운데 부분쯤에 UnicodeEncodeError: 'cp949' codec can't encode character '\xa0' in position 18081: illegal multibyte sequence 이 부분 때문인듯한데, 어떤식으로 해결하면 되나요? (윈도우cmd 사용합니다) 2020-02-28 21:17:02 [scrapy.utils.log] INFO: Scrapy 1.8.0 started (bot: ecommerce) 2020-02-28 21:17:02 [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 19.10.0, Python 3.5.3 (v3.5.3:1880cb95a742, Jan 16 2017, 16:02:32) [MSC v.1900 64 bit (AMD64)], pyOpenSSL 19.1.0 (OpenSSL 1.1.1d 10 Sep 2019), cryptography 2.8, Platform Windows-10-10.0.18362-SP0 2020-02-28 21:17:02 [scrapy.crawler] INFO: Overridden settings: {'SPIDER_MODULES': ['ecommerce.spiders'], 'BOT_NAME': 'ecommerce', 'ROBOTSTXT_OBEY': True, 'NEWSPIDER_MODULE': 'ecommerce.spiders'} 2020-02-28 21:17:03 [scrapy.extensions.telnet] INFO: Telnet Password: 27523c89cdea5418 2020-02-28 21:17:03 [scrapy.middleware] INFO: Enabled extensions: ['scrapy.extensions.telnet.TelnetConsole', 'scrapy.extensions.corestats.CoreStats', 'scrapy.extensions.logstats.LogStats'] 2020-02-28 21:17:04 [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-02-28 21:17:04 [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-02-28 21:17:04 [scrapy.middleware] INFO: Enabled item pipelines: [] 2020-02-28 21:17:04 [scrapy.core.engine] INFO: Spider opened 2020-02-28 21:17:04 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 2020-02-28 21:17:04 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023 2020-02-28 21:17:04 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://www.gmarket.co.kr/robots.txt> (referer: None) 2020-02-28 21:17:04 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://www.gmarket.co.kr/> (referer: None) 2020-02-28 21:17:04 [scrapy.core.scraper] ERROR: Spider error processing <GET http://www.gmarket.co.kr/> (referer: None) Traceback (most recent call last): File "c:\users\jh\appdata\local\programs\python\python35\lib\site-packages\twisted\internet\defer.py", line 654, in _runCallbacks current.result = callback(current.result, *args, **kw) File "C:\Users\JH\ecommerce\ecommerce\spiders\gmarket.py", line 11, in parse print(response.text) UnicodeEncodeError: 'cp949' codec can't encode character '\xa0' in position 18081: illegal multibyte sequence 2020-02-28 21:17:04 [scrapy.core.engine] INFO: Closing spider (finished) 2020-02-28 21:17:04 [scrapy.statscollectors] INFO: Dumping Scrapy stats: {'downloader/request_bytes': 442, 'downloader/request_count': 2, 'downloader/request_method_count/GET': 2, 'downloader/response_bytes': 97847, 'downloader/response_count': 2, 'downloader/response_status_count/200': 2, 'elapsed_time_seconds': 0.535697, 'finish_reason': 'finished', 'finish_time': datetime.datetime(2020, 2, 28, 12, 17, 4, 962553), 'log_count/DEBUG': 2, 'log_count/ERROR': 1, 'log_count/INFO': 10, 'response_received_count': 2, '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, 'spider_exceptions/UnicodeEncodeError': 1, 'start_time': datetime.datetime(2020, 2, 28, 12, 17, 4, 426856)} 2020-02-28 21:17:04 [scrapy.core.engine] INFO: Spider closed (finished) sublime의 코드는 아래와 같이 강의와 동일하게 했습니다. # -*- coding: utf-8 -*- import scrapy class GmarketSpider(scrapy.Spider): name = 'gmarket' allowed_domains = ['www.gmarket.co.kr'] start_urls = ['http://www.gmarket.co.kr/'] def parse(self, response): print(response.text)
- 해결됨현존 최강 크롤링 기술: Scrapy와 Selenium 정복
DUPEFILTER_CLASS 에 대해 설명 부탁드리겠습니다.
예제 파일에 DUPEFILTER_CLASS = 'scrapy.dupefilters.BaseDupFiler' 로 되어 있던데 이게 뭔지요? 답변 부탁드리겠읍니다.
- 미해결현존 최강 크롤링 기술: Scrapy와 Selenium 정복
강사님! 스크래피로 접속시 웹방화벽에서 Deny 메세지를 뿌리는데요....
이럴 경우 스크랩핑 할 방법이 궁금합니다. ^^ 크롤링 하려면 어떻게 하면 좋을까요? kwansoonpark ~/security_post scrapy shell 'https://edu.tta.or.kr/cop/bbs/selectBoardList.do\?bbsId\=BBSMSTR_000000000001' [s] Available Scrapy objects: [s] scrapy scrapy module (contains scrapy.Request, scrapy.Selector, etc) [s] crawler <scrapy.crawler.Crawler object at 0x10f623590> [s] item {} [s] request <GET https://edu.tta.or.kr/cop/bbs/selectBoardList.do%5C?bbsId%5C=BBSMSTR_000000000001> [s] response <200 http://www.tta.or.kr/deny_notice.jsp> [s] settings <scrapy.settings.Settings object at 0x10f623090> [s] spider <DefaultSpider 'default' at 0x110c13e90> [s] Useful shortcuts: [s] fetch(url[, redirect=True]) Fetch URL and update local objects (by default, redirects are followed) [s] fetch(req) Fetch a scrapy.Request and update local objects [s] shelp() Shell help (print this help) [s] view(response) View response in a browser In [1]:
- 해결됨현존 최강 크롤링 기술: Scrapy와 Selenium 정복
키보드마우스 동작 자동화.
강의 내용 중 7분50초쯤에, WebDriverWait, TimeoutException 함수가 나오면, 일반적으로 키보드 클릭과 같은 action을 취할때, 좀 다른 것을 쓴다면서 ActionChains(driver).click(~~).perform()을 주로 쓴다고 하셨는데, 예를들어, find_element_by_css_selector('~~').click() find_element_by_css_selector('~~').send_keys(Keys.RETURN) 같은 것을 사용하면 나중에 문제가 문제가 생기나요? 아니면, 딱히 특별한 이유는 없고, 보통 개발자들이 그냥 그렇게 사용하는 건가요? 아님 특별한 이유가 있는건가요? 갑자기 궁금증이 생겨서 질문드립니다.
- 해결됨현존 최강 크롤링 기술: Scrapy와 Selenium 정복
트위터_selenium 작동시 오류
본 강의대로 트위터 로그인을 selenium을 이용해서 하면 잘 됩니다. 하지만, 문제가 종종 발생합니다. 아래와 같은 에러 메세지가 마지막에 뜹니다. NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[name="session[username_or_email]"]"} (Session info: chrome=80.0.3987.116) 랜덤하게 어떨때는 실행이 잘 되고, 어떨때는이런 에러 메세지가 뜹니다. 그래서 코드 중간 중간에 time.sleep(10) 정도를 넣어 주면, 확실히 에러가 없이 실행이 됩니다. 왜 이런 현상이 발생하는 건가요? 성능이 좋은 컴퓨터로 하면 중간에 sleep 시간을 넣어주지 않아도 되나요? 아니면, selenium 자체가 가진 문제인가요? 아니면 혹시 인터넷이 느려도 이런 현상이 발생할 수도 있나요? 프로그램은 chromedriver로 하였습니다.(headless chrome 아니고..) 해결방법은 없나요? 중간에 sleep을 넣으면 시간이 너무 많이 걸립니다. (추가 질문) 본 강의 마지막 부분에 언급하신 내용 중, 특정 사이트는 동일한 코드를 사용할지라도 chromedriver/phantomjs/headless chrome 중에 되는 것이 있고 안되는 것이 있고, 또한 css_selector로는 찾아지는데, id 로는 찾을수 없는...등등 이러한 경우에는 미리 알수 있는 방법이 있나요? (이 사이트 경우에는 이런방식을 써야 겠구나하는...) 고급자들도 그냥 하나하나 다 해보면서 잘되는 것을 찾아 crawling을 하나요? 아니면 페이지 소스를 보고 판단 후에 crawling을 하나요?
- 미해결현존 최강 크롤링 기술: Scrapy와 Selenium 정복
지마켓크롤링1강의에서 csv파일 저장했는데 내용이 들어가 있지 않습니다
제목 그대로 코딩을 똑같이 따라해서 했는데 단지 선생님과 차이점은 전 vscode를 사용했을 뿐인데 csv파일로 저장을 하면 파일은 생기는데 안에 아무것도 내용이 없습니다... css선택자가 올바르게 됬는지 여부는 scrapy shell에서 제대로 확인했습니다! 코딩 사진 첨부드릴테니 보시고 조언 부탁드려요 ㅜㅜ
- 미해결현존 최강 크롤링 기술: Scrapy와 Selenium 정복
셀레니움에서 command 키가 작동이 안됩니다.
Dave Lee 강사님 덕분에 파이썬에 재미를 느끼게 있는 요즘입니다.^^ 요즘은 특히 셀레니움으로 웹사이트를 크롤링한 자동화 프로그램을 만들고 있는데요. 복사/붙여넣기(command + 'c/v')라던가 새탭띄우기(command + 't') 기능이 제대로 작동하지 않더라구요. 일주일 넘게 검색도 해보고 다른 방법이 있을까 찾아도 봤지만 아직도 해결을 못하고 있습니다. Mac(Catalina)과 크롬을 사용중인데, 이런 경우 어떻게 해결을 해야 할까요?
- 미해결현존 최강 크롤링 기술: Scrapy와 Selenium 정복
파이썬 문법 관련 질문
항상 유익한 강의 감사합니다. scrapy로 gmarket 크롤링 하기1 강의에서items.py파일 안에 EcommerceItem 클래스 안에 title 변수에 값을 넣는 부분이 이해가 잘 되지 않아 질문드립니다. 코드를 보면for title in tltles: item = EcommerceItem() item['title'] = title yield item 이 부분에서 앞전에 강의 하셨던 내용에서 클래스 안의 변수에 값을 넣을 때 .을 붙여서 넣는다고 하셨는데 그 방법과 어떤 차이가 있는지 궁금합니다. 가령 item.title = title 이 코드하고의 차이점이 궁금합니다.
- 미해결현존 최강 크롤링 기술: Scrapy와 Selenium 정복
크롬 브라우저 로딩시 id/password 자동완성
예를들어 크롬 브라우저에서 네이버 로그인을 할 때 예전에 제가 id/pw를 쿠키로설정(쿠키개념이 맞나 모르겠습니다..)하여서 id/pw가 자동완성된 상태로 브라우저가 있는데 이럴 때 selenium으로 로그인 조작할 때 어떻게 해야 할까요..? .clear()로 id/pw 입력칸 초기화시켜두 안되네요 ㅜㅜ
- 미해결현존 최강 크롤링 기술: Scrapy와 Selenium 정복
속성 값 출력 질문
크롤링 1탄부터 시작해서 2탄까지 유익한 강의 잘 듣고 있습니다. 감사합니다. 강의에서 배운 내용을 토대로 여러가지 연습을 해보다가 궁금한 점이 생겨 질문합니다. html코드에서 각 태그는 여러가지 클래스같은 속성들 (id, name 등)이 있는데 지금까지는 해당 태그 안에 있는 TEXT값을 추출하는 함수로 get_text(를 사용했는데, 혹시 이 속성의 값을 출력하려면 어떻게 해야하는지 궁금합니다. 예를들어 <li id="sp_nws162"> 해당 코드에서 id 값인 sp_nws162를 추출하는 방법이 궁금합니다
- 해결됨현존 최강 크롤링 기술: Scrapy와 Selenium 정복
강의자료및 소스코드는 제공하지 않나요?
강의 잘 듣고 있습니다. 강의 내용에 나온 소스코드를 다운받을 수 있는지 궁금합니다.
- 미해결현존 최강 크롤링 기술: Scrapy와 Selenium 정복
css관련 질문
안녕하세요! <p>...</p> 안에 있는 모든 텍스트와, 하위 클래스의 텍스트를 가져올려면 어떻게 해야하나요?? #journal_comment_279780214383945048857931676069855610723 > div.little-spaced.mb_10.single_comment_box.show_report_spam_link.cfx > div.correction_list.corner-rounded_5.little-spaced > div:nth-child(3) > ul > li.corrected.correct > p t감사합니다!
- 미해결현존 최강 크롤링 기술: Scrapy와 Selenium 정복
윈도우에서 shell할 때
scrapy shell "url"을 써주시면 작동합니다. 윈도우 쓰시는분들 저처럼 막히시면 'url' 대신에 "url"로 시도해보세요.
- 미해결현존 최강 크롤링 기술: Scrapy와 Selenium 정복
윈도우에서 anaconda prompt쓸 땐 ls 대신에 dir
dir 누르시면 나옵니다. 저만 해매는거 아니었을테니 ㄱ
- 미해결현존 최강 크롤링 기술: Scrapy와 Selenium 정복
seeko 싸이트 xpath 이렇게 하면 작동함
싸이트가 좀 달라졌어요
- 미해결현존 최강 크롤링 기술: Scrapy와 Selenium 정복
안되는 사람은 이렇게 시도 ㄱ
이러면 브라우저 나옵니다.