학습 이후 실제 팀원(3명) 구성 후 미니프로젝트 시작

Project : News 페이지 크롤링

  • 업무
    1. python requests, beautifulSoup 이용 Naver News기사 크롤링
    2. Flask / temp_html 코드 작성 후 웹페이지 로딩
data = requests.get('https://news.naver.com/main/list.naver?mode=LS2D&mid=shm&sid1=102&sid2=254', headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')

news_pol = soup.select('#main_content > div.list_body.newsflash_body > ul.type06_headline > li')
for report in news_pol:
    r = report.select_one('dl > dt:nth-child(2) > a')
    if r is not None:
        title = r.text
        lede = report.select_one('dl > dd > span.lede').text
        writer = report.select_one('dl > dd > span.writing').text
        time = report.select_one('dl > dd > span.date.is_new')
        image = report.select_one('dl > dt.photo > a')['href']

문제 발생
크롤링 후 python에서 작성한 크롤링 데이터를 html로 전달하는 방법에서 막힘

  1. Flask import 후 db 서버를 거치지 않고 로컬환경에서 html로 전달하는 방법에 문제 발생
@app.route('/')
def home():
   return render_template('index.html')

@app.route("/", methods=["GET"])
def news_pol_get():
   return jsonify({'news_pol':report})

if __name__ == '__main__':
   app.run('0.0.0.0', port=5000, debug=True)

시도방안

  1. html상에서 py_script를 이용하여 html문서에서 자체 작성
  • 크롤링 된 데이터가 정상적으로 로드 되지 않으며, 웹페이지 로딩 시 시간이 늘어지는 문제 발생
  1. 수업에서 배운 Get 방식으로 로드 시도
  • success 비활성 화 및 temp_html 비활성화 되어 작동불가
  1. pymongo DB 연결 후 시도
for report in culture:
    r = report.select_one('div.cluster_body > ul > li')
    if r is not None:
        title = r.select_one('div.cluster_text > a').text
        link = r.select_one('div.cluster_text > a')['href']
        if r.select_one('div.cluster_thumb > div > a') is not None:
            image = r.select_one('div.cluster_thumb > div > a').img['src']
        else:
            image = ""
        lede = r.select_one('div.cluster_text > div.cluster_text_lede').text

        doc = {
            "culture_title": title,

            "culture_image": image,
            "culture_desc": lede
        }
        db.culture.insert_one(doc)

for문을 통한 각 카테고리별 크롤링 변수 설정

  • image return중 간헐적 Error 발생하여 원인 확인

  • 크롤링 data 중 가끔 image가 없는 데이터 유입 확인

    if r is not None:
    	title = r.select_one('div.cluster_text > a').text
       link = r.select_one('div.cluster_text > a')['href']
       if r.select_one('div.cluster_thumb > div > a') is not None:
       image = r.select_one('div.cluster_thumb > div > a').img['src']
       else:
       	image = ""
       lede = r.select_one('div.cluster_text > div.cluster_text_lede').text
    
  • if , else 활용하여 [ image = “” ] error 발생시 다음 변수 read 하도록 조치