제품 링크를 타고 들어가야 원하는 정보가 나오는 사이트
377
投稿した質問数 2
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# from selenium.webdriver.chrome.service import Service
# from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import requests
from bs4 import BeautifulSoup
import time
options = Options()
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
options.add_argument(f"user-agent={user_agent}")
options.add_experimental_option("detach", True)
driver = webdriver.Chrome(options=options)
url = "https://kream.co.kr/search?shop_category_id=34"
driver.get(url)
time.sleep(2)
for i in range(1):
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
time.sleep(2)
html = driver.page_source
soup = BeautifulSoup(html, "html.parser")
items = soup.select(".product_card")
for item in items:
brand = item.select_one(".product_info_brand.brand")
name = item.select_one(".translated_name")
link = item.select_one(".item_inner").attrs['href']
click = name.text
driver.find_element(By.PARTIAL_LINK_TEXT, click).send_keys(Keys.CONTROL+Keys.ENTER)
time.sleep(1)
driver.switch_to.window(driver.window_handles[-1])
html = driver.page_source
soup2 = BeautifulSoup(html, "html.parser")
model_num = soup2.select_one("div:nth-child(3) > div.product_info")
print(brand.text.strip())
print(name.text)
print(model_num.text.strip())
print(f"https://kream.co.kr{link}")
print()
driver.close()
driver.switch_to.window(driver.window_handles[0])
아무것도 모르는 상태에서 시작했는데 좋은 강의 올려주신 덕분에 크롤링을 조금이나마 맛보게 된 것 같습니다.
어설프게나마 완성은 한거 같은데 궁금한게 있어서 질문 남깁니다.
상품 링크를 타고 들어가야 원하는 정보를 긁어올 수 있는 사이트인데, 자바스크립트로 동작하게끔 되어 있습니다.
시행착오 끝에 셀레니움으로 동작을 시켜봤는데
제품 하나하나마다 새창을 열어서 정보를 가져온 후에 창을 닫고.. 다시 새창을 열어서 정보를 가져온 후에 창을 닫고..
하다보니 시간도 너무 오래 걸리고 이렇게 하는게 맞는 건지 의구심이 듭니다.
어떻게 해야 속도를 높힐 수 있을까요?
回答 2
0
link_list = []
for item in items:
반복문이 시작하기 전에 link_list = []
이런식으로 빈 리스트를 만들어놓고
반복문안에서
link = item.select_one(".item_inner").attrs['href'] 이 코드 아래에
link_list.append(f"https://kream.co.kr{link}") 이런식으로 코드를 추가해서 link_list에 모든 링크를 담습니다.
그다음 그 리스트를 반복문으로 돌리면 됩니다.
for url in link_list:
driver.get(url)
0
안녕하세요, 인프런 AI 인턴입니다.
cdi2201님의 상황을 고려했을 때, 링크를 타고 들어가 정보를 수집하는 방식에서 속도를 향상시키고자 하실 때 고려할 수 있는 몇 가지 방법이 있습니다.
병렬 처리: 각 페이지를 병렬로 처리하여 정보를 수집하는 방법입니다. Python에서는
threading또는concurrent.futures모듈을 사용하여 여러 사이트에 대한 웹 크롤링을 동시에 수행할 수 있습니다. 이 방법은 각 페이지 처리 시간이 길 때 유용합니다.셀레니움 옵션 최적화: 셀레니움 작업에서 더 빠른 페이지 로딩을 위해 필요 없는 이미지나 자바스크립트 로딩을 차단할 수 있습니다. 예를 들어, 셀레니움 Chrome 옵션에
--blink-settings=imagesEnabled=false를 추가하여 이미지 로딩을 끄거나,--disable-javascript으로 자바스크립트를 비활성화하는 것입니다. 단, 일부 사이트 기능은 자바스크립트에 의존하기 때문에 이 방법이 항상 적합하지는 않습니다.헤드리스 모드 사용: 셀레니움을 헤드리스 모드로 실행하여 브라우저 UI를 렌더링하지 않고 작업을 수행하면 속도를 향상시킬 수 있습니다.
options.add_argument("--headless")를 코드에 추가하여 활용해 볼 수 있습니다.
비슷한 상황에 대한 질문이 여러 개 있어서래 두 가지 유사 질문 링크를 남깁니다. 직접적인 답변이나 해결책이 될 수는 없지만, 방법론적인 아이디어를 제공할 수 있습니다:
- 셀레늄 실습중 문의에서는 다른 웹사이트로 크롤링을 확장하려는 시도와 셀레늄을 사용하는 과정에서 발생할 수 있는 일반적인 문제에 대해 다룹니다.
- 제품 링크를 타고 들어가야 원하는 정보가 나오는 사이트에서는 특정 상품 정보를 셀레늄으로 수집하는 과정에서 발생할 수 있는 세부적인 문제에 대해 언급됩니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
멜론 사이트 수집부터 안됩니다
0
55
1
강의 시점이랑 현재랑 네이버 사이트 변화가 많은거 같아서 질문드립니다.
0
53
1
-href 가져오기
0
88
2
수업내용 프로젝트의 완성된 코드는 제공이 안돼나요?
0
154
1
안녕하세요 쿠팡 크롤링 막힌거 같아요 3번돌리니깐 막았어요 해결방법없을까요?
0
3575
1
쿠팡 BeautifullSoup 헤더넣어도 막히네요
0
441
1
네이버 쇼핑 크롤링 1 코드 사용 시, 접속 제한됐을 때의 해결 방법이 궁금합니다.
0
3157
1
추가 강의 업데이트 있나요?
0
244
1
lambda 중에 문의가 있습니다.
0
269
1
텔레그램 sendMessage 시 400에러가 뜹니다.
0
896
2
ftp 로긴 문제입니다. ㅜ
0
399
2
네이버 쇼핑 크롤링 질문입니다.
0
366
1
XPATH 네이버에서 카페 찾는 과정 문의입니다.
1
311
1
셀레니움 By.XPATH 를 이용한 키워드 입력 작성 질문입니다.
0
662
2
쿠팡 이미지 파일 다운받기에서 동일하게 코드 작성 후 요청하였지만 파일 다운로드가 안됩니다.
0
803
2
파이썬에 키워드를 치는게 아닌...
0
274
2
50프로 수강중입니다~
0
217
1
lst = lst50 + lst100 이거 대신에
0
318
2
증권, 메일 등 서비스 목록을 못가져와요 ㅠㅠ
1
279
1
네이버에 view탭이 업데이트가 됐는지 없어졌네요... ㅠㅠ
1
243
1
선생님이랑 똑같이 적었는데 저는 왜 오류가 날까요?ㅠ
0
352
2
네이버쇼핑 크롤링 문의
0
425
2
asyncio.run() cannot be called from a running event loop 에러 질문 드립니다
0
3880
4
멜론 유저에이전트 값 입력했음에도 창접속이안되여 ㅜㅜ
0
245
1

