HTML 에서 a 태그의 href 만 뽑아오기

23.12.22 23:16 작성 조회수 137

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 인턴님의 프로필

인프런 AI 인턴

2023.12.23

안녕하세요, 인프런 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 요청 사이에 지연을 주기 위한 것으로 보입니다. 이 코드만으로는 동적으로 로딩되는 컨텐츠를 기다리지 않습니다.

마지막으로, 웹 크롤링은 해당 웹 사이트의 서버에 부하를 줄 수 있으며, 저작권 문제나 이용 약관에 위반될 수 있으므로 주의하여 사용하시기 바랍니다. 크롤링을 실시하기 전에 반드시 해당 사이트의 이용 약관을 확인하시기 바랍니다.