개발/ETC

[python] 경향_원하는 섹션별로 전문 가져오기

wonpick 2021. 7. 17. 01:38

미션을 받았는데 시간을 너무 오래 끌어 죄송하다..ㅠㅠ

위와 같은 내용으로 크롤링을 진행하였고 내가 맡은 부분은 중앙일보와 경향이었다.

중앙일보는 페이지가 일관되어있고 섹션, 기간 등등 설정값을 조절 할 수 있어 매우 편리했는데, 경향은 아니었다 ㅠㅠ 

뿐만 아니라 경향은 2000.08월부터 자료가 존재하여 그 이전 데이터는 찾을 수가 없었다.. 

경향이 날 너무 괴롭혀서 머리가 아프다. 내가 바보인것도 맞지만🤮

누군가 내 글을 읽고 좀 편하게 자료를 추출할 수 있었으면 좋겠다.. 

 

특히 나는 [Errno 54] Connection reset by peer 이 오류에서 한참 헤맸는데 ㅠㅠ 그냥 예외처리하면 되는거였다

2번 자료에 그렇게 진행한 코드를 작성해놓았다. (웹 크롤링과 스크레핑 대해서 공부해야겠다는 생각......)

 

1. 링크만 추출하는 방법

위 자료에 기사까지 가져오는게 2번 방법이다. 

headers 추가 (방법은 https://pickwon.tistory.com/70 참고) 

headers = 헤더추가

target = ['문화','정치','사회','경제']

section_list=[]
url_list = []

for page in tqdm(range(366,2971)): #365-2970
    url = f'https://search.khan.co.kr/search.html?stb=khan&dm=0&q=%EC%B2%AD%EB%85%84&pg={page}&sort=1'
    req = requests.get(url,headers = headers)
    soup = BeautifulSoup(req.content, 'html.parser')
    

    for contents_type in soup.select('dd.date > strong'):
        if contents_type.get_text() in target:
            section_list.append(contents_type.get_text()) #섹션 추가
            link1 = contents_type.parent.parent
            link2 = link1.select_one('dt > a')
            url_list.append(link2['href'])

            
 for u in url_list :
     print(u, end = '\n')

 


2. 기사 전문 가져오기 (링크 + )

🥑  자료를 가져오는 순서!

1. 원하는 섹션(target)의 링크만 추출

2. 기사 전문, 제목, 날짜 등의 텍스트를 추출

3. list 범위 및 소켓 오류가 나면 예외 처리를 해준다. 

4. csv파일로 저장한다. 

 

 

 

이제 끝이다!!!! 경향 안녕!!! 다시는 보지말자 ㅠㅠ