DevSSOM
파이썬 크롤링 실습 - 뉴스기사 링크 수집하기 본문
뉴스 기사의 href 수집하기
이전 실습에서 진행된 페이지가 1,2,3 — 으로 구성된 웹 사이트 형태도 있지만, 단일 페이지에 여러 가지 링크가 있는 경우가 있음. 스포츠동아 뉴스에서는 기사를 클릭하면 해당 기사를 볼 수 있는 url로 이동할 수 있는데, 이런 url로 이동하는 링크들을 수집해보기.
https://sports.donga.com/ent?p=1&c=02
HTML 태그 중, 연동된 href를 수집하여 리스트형 변수 list_href에 담아 출력하는 실습임. get_href는 soup 객체를 받아서, 뉴스 기사들로 접근할 수 있는 href 링크를 리스트에 담아 반환해야 함.
팁
어떤 태그가 갖고 있는 속성들은 딕셔너리의 형태로 저장됨. 예를 들어, a 태그가 href, onclick의 속성을 갖고 있다면 그 속성들은 아래와 같이 표현됨.
{"href" : ... , "onclick" : ...}
어떤 태그 a의 속성 href에 바로 접근하는 방법은 대괄호 안에 속성 이름을 명시하는 것.
a = soup.find("a")
a["href"]
전체 속성을 담고 있는 딕셔너리를 확인하기 위해서는 attrs 속성으로 확인할 수 있습니다.
a.attrs
import requests
from bs4 import BeautifulSoup
def get_href(soup) :
# soup에 저장되어 있는 각 기사에 접근할 수 있는 href들을 담고 있는 리스트를 반환
return None
def main():
list_href = []
url = "https://sports.donga.com/ent?p=1&c=02"
result = requests.get(url)
soup = BeautifulSoup(result.text, "html.parser")
list_href = get_href(soup)
print(list_href)
if __name__ == "__main__":
main()
>>>
이전 글에서와 마찬가지로 웹 페이지에서 구글 검사로 HTML 태그를 확인해보면, <a>태그 안에 뉴스 기사의 href가 있고, 그 상위로 <span class="tit">, <ul class="list_news">가 있음. 이대로 <a>태그를 찾는 코드를 써보면
def get_href(soup) :
# soup에 저장되어 있는 각 기사에 접근할 수 있는 href들을 담고 있는 리스트를 반환
ul = soup.find("ul", class_="list_news")
for span in ul.find_all("span", class_="tit"):
print(span.find("a").attrs)
.attrs를 활용해서 <a> 태그가 어떤 속성값들을 담고 있는지 확인.
그러면 href 속성이 있다고 결과가 뜸. 그럼 이 href들을 얻기 위해서 a["href"]를 활용.
def get_href(soup) :
# soup에 저장되어 있는 각 기사에 접근할 수 있는 href들을 담고 있는 리스트를 반환
ul = soup.find("ul", class_="list_news")
for span in ul.find_all("span", class_="tit"):
print(span.find("a")["href"])
결과값들을 리스트 안에 담아주기 위해서 코드를 수정
def get_href(soup) :
# soup에 저장되어 있는 각 기사에 접근할 수 있는 href들을 담고 있는 리스트를 반환
ul = soup.find("ul", class_="list_news")
result = []
for span in ul.find_all("span", class_="tit"):
result.append(span.find("a")["href"])
return result
최종 코드
import requests
from bs4 import BeautifulSoup
def get_href(soup) :
# soup에 저장되어 있는 각 기사에 접근할 수 있는 href들을 담고 있는 리스트를 반환
ul = soup.find("ul", class_="list_news")
result = []
for span in ul.find_all("span", class_="tit"):
result.append(span.find("a")["href"])
return result
def main():
list_href = []
url = "https://sports.donga.com/ent?p=1&c=02"
result = requests.get(url)
soup = BeautifulSoup(result.text, "html.parser")
list_href = get_href(soup)
print(list_href)
if __name__ == "__main__":
main()
'Python > 크롤링' 카테고리의 다른 글
파이썬 크롤링 실습 - 네이버 뉴스 섹션들 기사 링크 추출하기 (0) | 2021.07.02 |
---|---|
파이썬 크롤링 실습 - 뉴스기사 목록의 내용 수집하기 (0) | 2021.07.01 |
파이썬 크롤링 실습 - 네이트 최신뉴스 링크 수집하기 (0) | 2021.06.30 |
파이썬 크롤링 실습 - 여러 페이지의 기사 제목 수집하기 (0) | 2021.06.28 |
파이썬 크롤링 - HTML 태그 속성 (0) | 2021.06.27 |
파이썬 크롤링 - 쿼리 개념 (0) | 2021.06.26 |
파이썬 크롤링 - 간단한 실습 : 네이트 판 댓글 수집 (1) | 2021.06.25 |