작성
·
252
0
파이썬으로 왓차피디아 사이트를 크롤링 하려고 하는데요.
requests 랑 Beautifulsoup 모듈을 사용하고 있습니다.
{영화 제목: ~~~,
제작연도 : ~~~,
링크: ~~~}
이렇게 만들고 싶습니다. 근데 링크를 뽑아오는 데서 문제를 겪고 있습니다.
보시다시피 아래에서 두 번째 줄에서 리스트 컴프리헨션을 활용했는데요.
soup_links 에 데이터가 비어서 나옵니다.
웹에서 개발자 도구로 확인했는데도 저렇게 나오는데 혹시 고수님들 어떻게 해야 링크를 크롤링 할 수 있을까요?
url_watcha = "https://pedia.watcha.com/ko-KR"
req_watcha = requests.get(url_watcha)
html = req_watcha.text
soup = BeautifulSoup(html, "lxml")
soup_titles = soup.select("div.css-1ntmtyn-ContentTitle-makeTypeFunction-handleHorizontalUlRender")
soup_year_countries = soup.select("div.css-zb5qbk-StyledContentYearAndNation-createMediaQuery-makePediaTypeFunction")
soup_links = soup.select("li.css-1ofozqs.ei3ci1h10 > a")
titles = [t.get_text(strip=True) for t in soup_titles[:10]]
year_countries = [y.get_text(strip=True) for y in soup_year_countries[:10]]
links = [l["href"] for l in soup_links]
time.sleep(1)
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
링크 데이터가 비어서 나오는 문제를 겪고 계시군요. roseyse04님의 코드를 보니 soup_links
에 데이터가 제대로 세팅되지 않은 것 같습니다. select
메서드를 이용할 때 적절한 CSS 선택자를 사용하는 것이 중요합니다. 실제 해당 웹 사이트의 HTML 구조가 어떠한지, a 태그에 어떠한 클래스 또는 속성이 지정되어 있는지를 정확히 확인해야 합니다.
CSS 선택자를 올바르게 지정하지 않아 데이터가 비어 나올 수 있습니다. 개발자 도구에서 a 태그의 정확한 위치를 파악하여 올바른 선택자를 사용하여야 합니다. 예를 들어, a 태그가 특정 class를 가진 div 태그의 자손이라면 soup.select('div.some-class a')
의 형태로 사용해야 합니다.
또 다른 가능성으로는 해당 링크가 JavaScript로 동적으로 생성되어서 BeautifulSoup로는 추출이 불가능한 경우도 있습니다. 이 경우 Selenium과 같은 도구를 사용하여 실제 브라우저에서 웹 페이지를 렌더링한 후 링크를 추출해야 할 수도 있습니다.
단, 제공된 코드에는 time.sleep(1)
의 코드가 있지만 이는 연속된 HTTP 요청 사이에 지연을 주기 위한 것으로 보입니다. 이 코드만으로는 동적으로 로딩되는 컨텐츠를 기다리지 않습니다.
마지막으로, 웹 크롤링은 해당 웹 사이트의 서버에 부하를 줄 수 있으며, 저작권 문제나 이용 약관에 위반될 수 있으므로 주의하여 사용하시기 바랍니다. 크롤링을 실시하기 전에 반드시 해당 사이트의 이용 약관을 확인하시기 바랍니다.