학습 이후 실제 팀원(3명) 구성 후 미니프로젝트 시작
Project : News 페이지 크롤링
- 업무
- python requests, beautifulSoup 이용 Naver News기사 크롤링
- 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로 전달하는 방법에서 막힘
- 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)
시도방안
- html상에서 py_script를 이용하여 html문서에서 자체 작성
- 크롤링 된 데이터가 정상적으로 로드 되지 않으며, 웹페이지 로딩 시 시간이 늘어지는 문제 발생
- 수업에서 배운 Get 방식으로 로드 시도
- success 비활성 화 및 temp_html 비활성화 되어 작동불가
- 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 하도록 조치