728x90
반응형
뉴스 기사 정보 찾기
한 페이지의 뉴스 기사 정보 추출하기
naver.py
import requests
from bs4 import BeautifulSoup
URL = "https://search.naver.com/search.naver?&where=news&query=%EC%82%BC%EC%84%B1%EC%A0%84%EC%9E%90&sm=tab_pge&sort=1&photo=0&field=0&reporter_article=&pd=6&ds=2020.06.23&de=2020.12.20&docid=&nso=so:dd,p:6m,a:all&mynews=0"
def extract_naver_pages():
result = requests.get(URL)
soup = BeautifulSoup(result.text, "html.parser")
# find로 찾은 결과를 sc_page_inner 변수에 넣고 리스트를 만들어 pages 변수에 넣어주기
sc_page_inner = soup.find("div", {"class": "sc_page_inner"}) #페이징이 있는 클래스 찾기
links = sc_page_inner.find_all('a') #페이지를 알기 위해 모든 a태그 찾기 (여기서 pages는 list임)
pages = []
for link in links:
pages.append(int(link.string))
max_page = pages[-1]
return max_page
def extract_naver_news(last_page):
news = []
for page in range(last_page):
result = requests.get(f"{URL}&start={page*10}&refresh_start=0")
soup = BeautifulSoup(result.text, "html.parser") #result에서 html을 파싱해주기
results = soup.find_all("div", {"class":"news_wrap api_ani_send"}) #news_wrap api_ani_send이라는 class를 모두 찾기
print(results)
return news
추출한 페이지 정보에서 title정보 추출하기
naver.py
import requests
from bs4 import BeautifulSoup
URL = "https://search.naver.com/search.naver?&where=news&query=%EC%82%BC%EC%84%B1%EC%A0%84%EC%9E%90&sm=tab_pge&sort=1&photo=0&field=0&reporter_article=&pd=6&ds=2020.06.23&de=2020.12.20&docid=&nso=so:dd,p:6m,a:all&mynews=0"
def extract_naver_pages():
result = requests.get(URL)
soup = BeautifulSoup(result.text, "html.parser")
# find로 찾은 결과를 sc_page_inner 변수에 넣고 리스트를 만들어 pages 변수에 넣어주기
sc_page_inner = soup.find("div", {"class": "sc_page_inner"}) #페이징이 있는 클래스 찾기
links = sc_page_inner.find_all('a') #페이지를 알기 위해 모든 a태그 찾기 (여기서 pages는 list임)
pages = []
for link in links:
pages.append(int(link.string))
max_page = pages[-1]
return max_page
def extract_naver_news(last_page):
news = []
#for page in range(last_page):
result = requests.get(f"{URL}&start={0*10}&refresh_start=0")
soup = BeautifulSoup(result.text, "html.parser")
results = soup.find_all("div", {"class":"news_wrap api_ani_send"})
#print(results)
for result in results: #results는 html list이고, soup을 사용했으니까 soup의 list이기도 함
title = result.find("a", {"class": "news_tit"})["title"] # 뉴스 title정보 출력
print(title)
return news
기사 링크 추출하기
naver.py
import requests
from bs4 import BeautifulSoup
URL = "https://search.naver.com/search.naver?&where=news&query=%EC%82%BC%EC%84%B1%EC%A0%84%EC%9E%90&sm=tab_pge&sort=1&photo=0&field=0&reporter_article=&pd=6&ds=2020.06.23&de=2020.12.20&docid=&nso=so:dd,p:6m,a:all&mynews=0"
def extract_naver_pages():
result = requests.get(URL)
soup = BeautifulSoup(result.text, "html.parser")
# find로 찾은 결과를 sc_page_inner 변수에 넣고 리스트를 만들어 pages 변수에 넣어주기
sc_page_inner = soup.find("div", {"class": "sc_page_inner"}) #페이징이 있는 클래스 찾기
links = sc_page_inner.find_all('a') #페이지를 알기 위해 모든 a태그 찾기 (여기서 pages는 list임)
pages = []
for link in links:
pages.append(int(link.string))
max_page = pages[-1]
return max_page
def extract_news(html):
title = html.find("a", {"class": "news_tit"})["title"] # 뉴스 title 정보
company = html.find("a", {"class": "info press"}).text # 신문사 정보
link = html.find("a")["href"] # 링크 주소
return {
'title': title,
'company': company,
'link': link} #dictionary 생성
def extract_naver_news(last_page):
news = []
for page in range(last_page):
print(f"Scrapping page {page}")
result = requests.get(f"{URL}&start={page*10}&refresh_start=0") # 뉴스 기사 정보
soup = BeautifulSoup(result.text, "html.parser")
results = soup.find_all("div", {"class":"news_wrap api_ani_send"})
for result in results: #results는 html list이고, soup을 사용했으니까 soup의 list이기도 함
news_info = extract_news(result)
news.append(news_info) # news_info를 news배열에 담기
return news
find와 find_all의 차이
find는 첫번째 찾은 결과를 가져옴
find_all은 리스트 전부를 가져옴
strip()
strip() | 공백 제거 |
strip([chars]) | 인자로 전달된 문자를 String의 왼쪽과 오른쪽에서 제거 |
lstrip([chars]) | 인자로 전달된 문자를 String의 왼쪽에서 제거 |
rstrip([chars]) | 인자로 전달된 문자를 String의 오른쪽에서 제거 |
.text와 .string 차이
.string 태그 하위에 문자열을 객체화 함
문자열이 없으면 None을 반환
.text는 하위 자식태그의 텍스트까지 문자열로 반환(유니코드 형식)
즉, 하위태그에 텍스트까지 문자열로 파싱할 경우 .text를 사용하는 것이 좋음
다만, 정확한 파싱을 위해서 선택자로 잘 접근해서 .string을 사용하는 걸을 선호하는 개발자들이
외국에는 더 많은 듯함 ➡ 잘 판단해서 사용하기
반응형
'프로그래밍 > Python' 카테고리의 다른 글
자료형 - 숫자형 (0) | 2021.01.07 |
---|---|
Web Scraping3(CSV 파일에 저장하기) (0) | 2020.12.25 |
Web Scraping1 (0) | 2020.12.23 |
web Scrapping을 위한 requests와 BeautifulSoup 설치 (0) | 2020.12.23 |
개발환경 세팅 (0) | 2020.12.23 |