본문 바로가기
DevSpace/Python | Django

[Python]a href 링크 크롤링

by 반니루니 2019. 11. 11.
반응형

크롤링 중 링크태그인 a href 크롤링입니다.

 

SBS의 최신뉴스/속보 링크를 크롤링 해보겠습니다.

 

링크 : https://news.sbs.co.kr/news/newsflash.do?plink=GNB&cooper=SBSNEWS

 

SBS 최신 뉴스/속보

SBS 뉴스 - TV 뉴스, 날씨, 8뉴스, 모닝와이드, 나이트라인, 뉴스브리핑, 취재파일, 비디오머그, 스브스뉴스, 보이스, 등을 제공합니다.

news.sbs.co.kr

 

크롬 개발자도구(f12)를 사용하여 기사글의 div 위치를 확인합니다.

 

기사태그의 a href를 확인 후 부모 div 클래스 확인

 

<div class="w_news_list type_issue"> 이 부분이 상위 div 클래스이며, 아래 li 마다 기사링크들이 있습니다.

 

beautifulsoup를 사용하여 프로그래밍을 해보면,

 

1
2
3
4
5
6
7
8
9
10
import urllib.request
from bs4 import BeautifulSoup
 
url = "https://news.sbs.co.kr/news/newsflash.do?plink=GNB&cooper=SBSNEWS"
req = urllib.request.Request(url)
sourcecode = urllib.request.urlopen(url).read()
soup = BeautifulSoup(sourcecode, "html.parser")
  
for href in soup.find("div", class_="w_news_list").find_all("li"):
    print(href.find("a")["href"])
cs

url은 위의 링크페이지이며, 

 

for href in soup.find("div", class_="w_news_list").find_all("li"): 

-> w_news_list type_issue 두개가 아닌 w_news_list 한가지만 가지고 찾습니다.

 

find_all("li"): 

->위 w_news_list 찾은 후 li태그 부분만을 찾습니다.

 

print(href.find("a")["href"])

->위 li태그 중 a href 태그의 링크를 찾습니다.

 

Result:

결과 값

위의 결과값으로 복사하여 접속하면, 접속이 안됩니다.

 

실제주소는 https://news.sbs.co.kr 주소가 앞에 붙어야합니다.

/news/endPage 앞에 주소가 별도로 붙어있다.

위의 코드를 수정하여,

 

1
2
3
4
5
6
7
8
9
10
import urllib.request
from bs4 import BeautifulSoup
 
url = "https://news.sbs.co.kr/news/newsflash.do?plink=GNB&cooper=SBSNEWS"
req = urllib.request.Request(url)
sourcecode = urllib.request.urlopen(url).read()
soup = BeautifulSoup(sourcecode, "html.parser")
  
for href in soup.find("div", class_="w_news_list").find_all("li"):
    print("https://news.sbs.co.kr" + href.find("a")["href"])
cs

위와 같이 수정하면,

 

결과 값은

 

풀 주소가 완성되었다.

어려우시거나 궁금하신점은 덧글로 남겨주세요.

반응형