실습_2. 여러 페이지 크롤링

Updated:

여러 페이지의 기사 제목 수집하기


import requests
from bs4 import BeautifulSoup

def crawling(soup) :
    result = []
    ul = soup.find("ul",class_="list_news").find_all("span",class_="tit")
    
    for i in ul:
        result.append(i.get_text())
    
    return result

def main() :
    answer = []
    url = "https://sports.donga.com/ent"
    
    for i in range(0, 5):
        #=======================핵심 내용=======================
        req = requests.get(url, params = {'p' : i*20+1})
        # params를 사용해서 다른 페이지로 이동하면서 데이터를 가져올수 있다
        #======================================================
        soup = BeautifulSoup(req.text, "html.parser")
        
        answer += crawling(soup)

    print(answer)

if __name__ == "__main__" :
    main()

각 기사의 href 수집하기

import requests
from bs4 import BeautifulSoup

def get_href(soup) :
    result = []
    ul = soup.find("ul",class_="list_news").find_all("span",class_="tit")
    
    for i in ul:
        # =================== 핵심내용 =============================
        print(i.find("a").attrs)
        # attrs를 사용해서 속성과 값을 딕셔너리 형태로 확인할 수 있다
        print(i.find("a")["href"])
        # "href"를 key값으로 사용해서 하이퍼링크를 조회할 수 있다
        # ==========================================================
        result.append(i.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")

    print(get_href(soup))

if __name__ == "__main__":
    main()

네이트 최신뉴스 href 수집하기

import requests
from bs4 import BeautifulSoup
    
def get_href(soup) :
    result = []
    div = soup.find("div",class_="postSubjectContent").find_all("a")
    
    for i in div:
        result.append("https:"+i["href"])

    return result

def main() :
    list_href = []
    
    url = "https://news.nate.com/recent?mid=n0100"
    req = requests.get(url)
    soup = BeautifulSoup(req.text, "html.parser")
    
    list_href = get_href(soup)
    
    print(list_href)

if __name__ == "__main__" :
    main()

sbs 뉴스 최신 기사 목록의 내용 수집하기

  • 먼저 최신 기사 제목의 href를 수집한다
  • 수집한 href를 사용해서 주소의 내용을 수집한다
import requests
from bs4 import BeautifulSoup

def crawling(soup) :
    text = soup.find("div",class_="text_area").get_text().replace("\n"," ")
    return text

def get_href(soup) :
    
    result = []
    div = soup.find("div",class_="w_news_list").find_all("a",class_="news")
    
    for i in div:
        result.append("https://news.sbs.co.kr"+i["href"])
    
    return result

def main():
    list_href = []
    list_content = []

    url = "https://news.sbs.co.kr/news/newsflash.do?plink=GNB&cooper=SBSNEWS"
    req = requests.get(url)
    soup = BeautifulSoup(req.text, "html.parser")
    
    list_href = get_href(soup)
    # get_href함수에서 먼저 href를 수집한다
    
    for url in list_href :
        href_req = requests.get(url)
        href_soup = BeautifulSoup(href_req.text, "html.parser")
        result = crawling(href_soup)
        # crawlong 함수를 사용, 수집한 href를 하나씩 돌면서 내용을 수집한다
        list_content.append(result)
        
    print(list_content)
    print(len(list_content))

if __name__ == "__main__":
    main()

다양한 섹션의 속보 기사 내용 추출하기

import requests
from bs4 import BeautifulSoup

def crawling(soup) :
    # 기사에서 내용을 추출하고 반환
    result = []
    result.append(soup.find("div",id = "articleBodyContents").get_text().replace("\n"," ").replace("// flash 오류를 우회하기 위한 함수 추가 function _flash_removeCallback() {}"," "))
    
    return result

def get_href(soup) :
    # 각 분야별 속보 기사에 접근할 수 있는 href를 리스트로 반환
    ul = soup.find("ul",class_="type06_headline").find_all("a")
    result = []
    for i in ul:
        result.append(i["href"])
    return result

def get_request(section) :
    # 입력된 분야에 맞는 request 객체를 반환
    # 아래 url에 쿼리를 적용한 것을 반환
    url = "https://news.naver.com/main/list.nhn"
    dicts = {"정치":100, "경제":101, "사회":102, "생활":103, "세계":104, "과학":105}
    
    req = requests.get(url, params = {"sid1" : dicts[section]})
    
    return req
    
def main() :
    list_href = []
    result = []
    
    # 섹션을 입력하세요.
    section = input('"정치", "경제", "사회", "생활", "세계", "과학" 중 하나를 입력하세요.\n  > ')
    
    req = get_request(section)
    soup = BeautifulSoup(req.text, "html.parser")
    
    list_href = get_href(soup)
    
    for href in list_href :
        href_req = requests.get(href)
        href_soup = BeautifulSoup(href_req.text, "html.parser")
        result.append(crawling(href_soup))
    print(result)

if __name__ == "__main__" :
    main()

특정 영화 리뷰 추출하기


import requests
from bs4 import BeautifulSoup

def crawling(soup) :
    # soup 객체에서 추출해야 하는 정보를 찾고 반환
    div = soup.find("div",class_="score_result").find_all("p")
    
    result = []
    
    for i in div:
        result.append(i.get_text().replace("\n","").replace("\t","").replace("\r",""))
    
    return result
    
def get_href(soup) :
    # 검색 결과, 가장 위에 있는 영화로 접근할 수 있는 href를 반환
    href = "https://movie.naver.com" + soup.find("ul",class_="search_list_1").find("a")["href"]
    
    return href

def get_url(movie) :
    # 입력된 영화를 검색한 결과의 url을 반환
    url = "https://movie.naver.com/movie/search/result.nhn?query="+movie+"&section=all&ie=utf8"
    return url
    
def main() :
    list_href = []
    
    # 섹션을 입력하세요.
    movie = input('영화 제목을 입력하세요. \n  > ')
    
    url = get_url(movie)
    print(url)
    req = requests.get(url)
    soup = BeautifulSoup(req.text, "html.parser")
    
    movie_url = get_href(soup)
    
    href_req = requests.get(movie_url)
    href_soup = BeautifulSoup(href_req.text, "html.parser")
    print(crawling(href_soup))
    
if __name__ == "__main__" :
    main()

Leave a comment