파이썬 셀레니움 크롤링이 힘드네요 ㅠㅠ 욕 훈수 다 좋으니 피드백해주세요
본문
https://www.boannews.com/default.asp 이 링크에서 조회순을 제목과 링크를 .csv 파일에 저장하고 추가로 그 링크로 들어가서
이런 형식에 내용들도 저장해야하는데 아무리 구글링하고 gpt를 해봐도 계속해서 오류만 뜨네요 ㅠㅠ 뭐가 문제일까요ㅠ 도와주세요 ㅠ
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
import csv
from webdriver_manager.chrome import ChromeDriverManager
# 크롬 드라이버 자동 업데이트
service = Service(executable_path=ChromeDriverManager().install())
# 브라우저 안 꺼지게 하기
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
driver = webdriver.Chrome(service=service, options=chrome_options)
driver.get("https://www.boannews.com/default.asp")
# 데이터 추출
items = driver.find_elements_by_css_selector(".tab-newslist li")
data = []
for item in items:
link = item.find_element_by_css_selector("a").get_attribute("href")
title = item.find_element_by_css_selector("span[style='font-weight:400;']").text
data.append([title, link])
driver.quit()
# CSV 파일 작성
filename = "data.csv"
with open(filename, "w", encoding="utf-8", newline="") as file:
writer = csv.writer(file)
writer.writerow(["Title", "Link"]) # CSV 파일의 헤더 작성
writer.writerows(data) # 데이터 작성
print(f"데이터가 성공적으로 '{filename}' 파일에 저장되었습니다.")
답변 3
어떻게 오류가 나는지도 말씀해주세요
일단 현재 find_element_by_css_selector 은 버전업이 되면서 사용이 되지 않습니다.
find_element 메소드를 사용하셔야 합니다.
driver.find_element(By.CSS_SELECTOR,'.tab-newslist li');
으로 하셔야 합니다.
1. selenium 버젼에 따라 사용법이 바뀌었으니 find_elements_by_css_selector 에러이면 검색해서
find_elements_by_css_selector ==> driver.find_elements(By. 변경 사용
2. items = driver.find_elements_by_css_selector(".tab-newslist li") <---이게 잘못 되었습니다
.tab-newslist가 두개 보이는데 위와 같이 하면 li 는 어느 tab-newslist의 li 인지 구분 되겠어요?
item1 = driver.find_element_by_css_selector(".tab-newslist) <--이게 첫번째 tab-newslist
itemli= item1.find_elements_by_tag_name("li")
또는
items = driver.find_elements_by_css_selector(".tab-newslist")
for item in items:
itemli= item.find_elements_by_tag_name("li")
for li2 in itemli
기타 등등
두번째 .tab-newslist 지정
items = driver.find_elements_by_css_selector(".tab-newslist")
itemli = items[1].find_elements_by_tag_name("li")
for li2 in itemli