""" dumpimages.py Downloads all the images on the supplied URL, and saves them to the specified output file ("/test/" by default) Usage: python dumpimages.py https://www.1688.com// [output] """ from bs4 import BeautifulSoup as bs from urllib.request import ( urlopen, urlparse, urlunparse, urlretrieve) import os import sys def main(url, out_folder="/test/"): """Downloads all the images at 'url' to /test/""" soup = bs(urlopen(url)) parsed = list(urlparse(url)) for image in soup.findAll("img"): print("Image: %(src)s" % image) filename = image["src"].split("/")[-1] parsed[2] = image["src"] outpath = os.path.join(out_folder, filename) if image["src"].lower().startswith("http"): urlretrieve(image["src"], outpath) else: urlretrieve(urlunparse(parsed), outpath) def _usage(): print("usage: python dumpimages.py http://example.com [outpath]") if __name__ == "__main__": url = sys.argv[-1] out_folder = "/test/" if not url.lower().startswith("http"): out_folder = sys.argv[-1] url = sys.argv[-2] if not url.lower().startswith("http"): _usage() sys.exit(-1) main(url, out_folder) root@goorm:/workspace/firstContainer# cd "/workspace/firstContainer"; root@goorm:/workspace/firstContainer# python3 /workspace/firstContainer/index.py Traceback (most recent call last): File "/workspace/firstContainer/index.py", line 38, in <module> url = sys.argv[-2] IndexError: list index out of range 구름ide로작성했는데 이렇게 오류가 떠요ㅠㅠ 전체이미지가 아닌 배웠던 class 특정영역의 이미지들만 일괄저장하고싶어서요;;ㅠ
안녕하세요! headless를 이용하면 안되는 사이트도 있는거 같아서. 그냥 크롬창을 띄워놓고 작업을 하는데요. 탭을 2개 열어 놓고 작업을 시켰습니다. 근데 탭을 변경하면 최소화된 크롬창이 자꾸 활성화 되면서 모니터 앞으로 튀어나오는데요.. 탭 변경시 driver.switch_to.window(driver.window_handles[0]) 이 코드를 사용하는데요. 0에서 작업하다가 1로 넘기면, 넘길 때 마다 크롬창이 앞으로 팍 튀어나옵니다! 해결 방법이 있을까요? headless를 사용하지 않고, 크롬창이 열리는 대신, 그냥 최소화 해놓고 작업을 하고 싶습니다!
강의 잘 들었습니다! 쿠팡 사이트에 여러번 시도를 하니까 엑세스 디나인이 뜨더라구요. 강사님은 혹시 이것이 발생하는 주기를 알고 계실까요? 예) 1분에 10번 이상 접속 시도시 차단. 차단되면 1일 후 이용 가능. 이런 대략적인 정보나? 경험이 있으면 알려주시면 감사하겠습니다!
선생님 난관에 부딪혔습니다. 제목과, 이름은 잘가져오는데. 썸네일 이미지가 메뉴에 가려져 있어서, 클릭을 못한다고 합니다. 이를 어찌 해결해야 할지 도저히 모르겠습니다 일단 코드는 아래와 같습니다. items = driver.find_elements(By.CSS_SELECTOR, "#_chartList > li.list_item") time.sleep(2) #_chartList .title.ellipsis for idx, item in enumerate(items[:5], 1): title = item.find_element(By.CSS_SELECTOR, 'p.title.ellipsis') name = item.find_element(By.CSS_SELECTOR, 'span.name.ellipsis') thumb = item.find_element(By.CSS_SELECTOR, 'div.thumb > a') thumb.click() time.sleep(2) album_url = driver.current_url driver.back() print(f">>>{idx}<<<") print(title.text.strip()) print(name.text.strip()) print(album_url) print() time.sleep(2) 실행하면 아래와 같은 오류가 납니다. selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <a href="javascript:goDetail('album','11211297')">...</a> is not clickable at point (40, 24). Other element would receive the click: <span class="ico-sprite ico-gnb-menu">...</span> 구글링 열심히 하다가 챗 gpt에게 물어보니 오약 : 메뉴 요소에 가려져있어서 클릭을 못하고, 메뉴 요소를 닫아야 한다고합니다 <span class="ico-sprite ico-gnb-menu"> 이 메뉴 요소가 문제인거 같은데, 메뉴에 가려져 있으면 어떻게 해결 해야하나요? 어떡해든 혼자힘으로 해결해 보려고 하였는데, 이건 도저히 해결책을 어떻게 연구해야 할지 모르겠습니다. 도와 주신다면 감사하겠습니다.
자동화 메세지 안나오는 코드 입력후 options.add_experimental_option('excludeSwitches', ['enable-automation']) 크롬을 실행하면, 자동화 메세지지가 안나옵니다. 그러나 1분 58초 입니다. 크롬에서 오류 메세지 안보내는, 코드를 입력하면 자동화 메세지가 출력됩니다 options.add_experimental_option('excludeSwitches', ['enable-logging']) 즉 자동화 메세지 안나오는 코드 입력상태 이고 오류 메세지 안나오는 코드 입력상태 인데 위 두가지 조건을 입력하면 자동화 메세지가 안나오고 and 오류 메세지도 안나와야 하는데.. 오류 메세지는 나오지만, 자동화 메세지가 출력됩니다. 그래서 영상을 돌려보니, 선생님 강의 영상에서도 똑같은 증상이 나오고 있습니다! 아래는 선생님강의 영상 캡쳐 입니다 제 생각에는 add_experimental_option은 아래에 있는 코드가 적용되는게 아닐까 추측되네요. 저도 초보이지만, 저보다 늦게 공부하시는 분을 위해 남겨 둡니다. 저처럼 고민하시는 분들이 있으실수도 있으니까요
강의 영상중에서 5분 27초 보면 vscode 터미널 내용지울땐, 선생님께서 clear 라는 입력하시고 엔터 누르시면, 터미널 내용이 사라집니다. 저는 clear라고 하면, 'clear'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. 위와 같이 나옵니다. 그래서 찾아보니, cls라고 하면 지워진다고 하는데, 선생님처럼 clear 명령어를 사용하고 싶습니다. 선생님께서는 터미널 단축키를 수정 하신건지 아니면 다른 터미널을 사용 하신건지 궁금합니다. 이게 간단한거 같으면서도, 검색으로는 더이상 알아낼수가 없네요 알려 주시면 감사하겠습니다.
vscode 사용하고 있습니다. 코딩과 실행 모두 문제는 없으나 selenium 관련 명령 입력할때는 김플님 강의화면과 달리 자동완성 기능이 작동하지 않습니다. 예를 들어, options = Options() options. 까지 입력하면 여러가지가 나오고 그 중 add_experimental_option 이 떠야되는데 그렇지 않아 매번 직접 타이핑하고 있습니다. 해결방법이 있을까요?
다음 카페 크롤링을 이 강의를 통해 하고 있습니다. 다음 카페 로그인 및 해당 게시판 까지는 이동이 되는 데, 해당 글 내용에 대한 크롤링이 되지 않습니다(Xpath나 class를 이용해도 게시글이 클릭도 안되는데 그 이유가 궁급합니다.ㅠㅠ / ) <a href="/_c21_/bbs_read?grpid=5RFF&fldid=Acvb&contentval=002Lizzzzzzzzzzzzzzzzzzzzzzzzz&datanum=9034&page=1&prev_page=0&firstbbsdepth=&lastbbsdepth=zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz&listnum=20" class="txt_item">심한 자폐아이 </a> 여기 안에 있는 내용을 가지고 오고 그 아래 부분의 글로 가지고 오려고 합니다...
이전 질문에 대해서 너무나도 빠른 답변 감사합니다. 해결되었습니다. 어떻게 해결책을 찾으셨나요? 쿠팡 part빼고 완강했는데, 다 들어보겠습니다. 다른 질문이 있습니다. 손흥민을 input값을 받아도 단순하게 더해서는 하이퍼링크된 url이 형성되지 않습니다. 저는 quote_plus를 사용해서 해결했는데, 강사님은 어떻게 해서 단순하게 더해서 하이퍼링크된 url이 완성될까요?
강사님의 훌륭한 강의력에 감탄하며 쿠팡 크롤링을 제외한 부분은 다 들었습니다. 감사합니다. 쿠팡 크롤링 파트에 질문이 있습니다. 3월27일 기준으로 위 방법이 막힌것같습니다. 다른 방법을 찾으려고 했지만, 셀레니움 밖에 찾지 못했습니다. 뷰티풀숩을 이용한 해결책은 없나요?
우선 강의대로 블랙핑크, 손흥민 검색했을때 강의처럼 결과가 잘 나옵니다. 제가 다른 키워드인 '제휴마케팅'으로 검색하니 첨부한 사진과 같은 결과가 나왔습니다. 혹시나 중간에 네이버 파워컨텐츠 광고가 있어서 그런건가해서 개발자도구로 코드를 비교해봤는데 그건 아닌거같고, 원인을 아직 모르겠어서 질문남깁니다. (수업처럼 크롤링 결과는 잘 나오고 맨 마지막에 아래와 같은 문구가 나왔습니다). 그리고 print(len(areas))부분도 '제휴마케팅'으로 검색했을땐 나오지 않았구요.
수업을 듣고 다른 사이트로 실습을 해보려고 하는데, jsp로 만들어진 공공기관 사이트는 뭔가 잘 안먹히는 모습니다. 아래 사이트의 테이블 정보를 가져오고 싶은데, 얘네들은 클릭해도 주소가 변경되는것도 없고 아래와 같이 table이 들어있는 상위 class 태그를 찾아서 정의하고, 거기에서 table의 class명을 넣고 tbody, tr까지 찾아들어가도록 코딩을 했는데 table의 class명이 없다고 에러가 뜹니다. 이런 사이트의 table내 정보는 어떻게 가져올 수 있고, 테이블에 있는 원자재를 클릭해서 넘어가는 페이지는 어떻게 찾아갈 수 있나요?(XPATH, LINK_TEXT해도 먹히지 않아요..) https://www.motie.go.kr/motie/py/sa/todayeconomyindexprice/todayEconomyIndexPri.jsp url = "http://www.motie.go.kr/motie/py/sa/todayeconomyindexprice/todayEconomyIndexPri.jsp" driver.get(url) time.sleep(2) # driver.find_element(By.LINK_TEXT,"통계정보").click() # time.sleep(2) # driver.find_element(By.LINK_TEXT,"원자재가격정보") # time.sleep(2) class1 = driver.find_element(By.CLASS_NAME,"iframeLayout01") #테이블은 위와 같이 <table>안에 <tbody>, <tbdoy>안에 <tr>, <tr>안에 <td> 순으로 포함되어 있다. table_content = class1.find_element(By.CLASS_NAME,"data_print") tbody = table_content.find_element(By.TAG_NAME,"tbody") rows = tbody.find_elements(By.TAG_NAME,"tr") for index, value in enumerate(rows): body=value.find_elements(By.TAG_NAME,"td")[0] print(body.text)
현재 코드는 아래와 같습니다. 자꾸 에러뜨는게 있어서 구글링하면서 2줄이 추가되었네요. options = Options() ## ERROR:device_event_log_impl.cc(218) 방지코드 options.add_argument('--no-sandbox') options.add_experimental_option("excludeSwitches", ["enable-logging"]) ## 화면 창 유지해주는 코드 options.add_experimental_option("detach", True) 그런데, 네이버 창이 떠서 잠시 머물다가 창이 꺼지진 않고 이렇게 바뀝니다. 주소가 data; 내용은없음.. 무엇이 문제일까요. 구글링해도 잘 못찾겠네요.