import time
import requests
from bs4 import BeautifulSoup as bs
import pandas as pd
requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)
수집한 연설 목록 가져오기
df = pd.read_csv("대통령연설기록_강사님.csv")
df.shape
df.head()
url 만들기
base_url = "https://www.pa.go.kr/research/contents/speech/index.jsp"
sub_url = df.iloc[-2]["내용링크"]
print(df.iloc[-2]["제목"])
print(base_url + sub_url)
수석·보좌관회의
https://www.pa.go.kr/research/contents/speech/index.jsp?spMode=view&catid=c_pa02062&artid=1401640
# 이 부분 조금 헷갈리기는 함
내용 페이지에 http 요청
# 인증서가 없는 사이트는 접속 시 웹 브라우저에서 다음과 같은 에러 메시지가 발생합니다.
# verify=False를 통해 SSL 인증서 확인 과정을 생략하겠다는 의미입니다.
# 인증서가 없는 사이트 접속으로 인해 혹시라도 발생할 수 있는 문제를 알려주기 위한 경고 메시지 입니다.
# 인증서 오류가 신경쓰인다면 아래 경고메시지 비활성화 처리로 없앨 수도 있지만 경고이기 때문에 데이터 수집에는 문제가 없습니다.
response = requests.get(url = base_url+sub_url, verify = False)
response.text
BeautifulSoup 적용
html = bs(response.text)
html.select('td.content')[0].text
# 내 생각에 selector 하는 것 보다 bs 해서 위치 찾고 select하는 게 나은 것 같음
다른 방법
# html.find_all("td", {"class":"content"})
content = html.find("td", {"class":"content"}).text
# 다른 방법
content=html.select('#content > div > table > tbody > tr > td.content')[0].text
내용 수집 함수 만들기
def get_content(sub_url):
"""내용수집 함수
1) 수집할 URL 만들기
2) requests로 HTTP 요청하기
3) response.text에 BeautifulSoup 적용하기
4) 내용 가져오기
5) time.sleep()
6) 내용 반환하기
"""
try :
base_url = "https://www.pa.go.kr/research/contents/speech/index.jsp"
url = base_url + sub_url
response = requests.get(url, verify = False)
html = bs(response.text)
content = html.select('td.content')[0].text
return content
except :
return None
# except HTTPConnection :
# 특정 시간을 쉬었다가 해당 함수를 다시 호출하게 할 수도 있습니다.
# HTTPConnection 오류일때만 해당 함수를 다시 호출하게 하는 방법도 있습니다.
# time.sleep(60)
# get_content(sub_url)
# 중간에 오류가 나게 되면 다시 처음부터 수집해야 하는 상황이 될 수도 있기 때문에
# 일단 오류가 나면 None 값을 반환하도록 합니다.
# 함수가 잘 만들어졌는지 확인하기
get_content('?spMode=view&catid=c_pa02062&artid=1310442')
전체 데이터에 적용
from tqdm.notebook import tqdm
tqdm.pandas()
df = df.head(10) #전체 다하면 너무 무리
view = df['내용링크'].progress_map(get_content)
view
내용 변수 만들기
df['내용'] = view
df
쉽지 않다!
'AI SCHOOL > Python' 카테고리의 다른 글
[Python] 네이버 금융 ETF 수집, json 데이터 수집 (0) | 2023.01.24 |
---|---|
[Python] 다산콜센터 주요 민원 내용 수집(2) (0) | 2023.01.24 |
[Python] 다산콜센터 주요 민원 목록 수집(1) (0) | 2023.01.19 |
[Python] 대통령연설기록 수집 - 1 (0) | 2023.01.17 |
[Python] 네이버 금융 뉴스기사 수집 (0) | 2023.01.15 |