파이썬 셀레니움 크롤링이 힘드네요 ㅠㅠ 욕 훈수 다 좋으니 피드백해주세요

파이썬 셀레니움 크롤링이 힘드네요 ㅠㅠ 욕 훈수 다 좋으니 피드백해주세요

QA

파이썬 셀레니움 크롤링이 힘드네요 ㅠㅠ 욕 훈수 다 좋으니 피드백해주세요

답변 3

본문

2039814436_1688278070.5668.png

https://www.boannews.com/default.asp 이 링크에서 조회순을 제목과 링크를 .csv 파일에 저장하고 추가로 그 링크로 들어가서

2039814436_1688278130.6737.png

이런 형식에 내용들도 저장해야하는데 아무리 구글링하고 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

 

 

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 209
© SIRSOFT
현재 페이지 제일 처음으로