실습_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+"§ion=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