커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
스크래핑 결과를 html로 보내려는데, string indices must be integers 에러가 납니다.
undefined주차
북마크
신*민
댓글
5
추천
2
조회수
19
조회수
19
답변 완료


웹 스크래핑 결과를 html에 보여주려 하는데, href를 가져와서 dict에 집어넣으려는데 string indices must be integers 에러가 납니다.


작성한 코드 및 에러 메세지


에러 메시지


스파르타 즉문즉답


서버쪽 코드


@app.route('/realnews', methods=["POST"])
def get_news():
    headers = {
        'User-Agent':
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
    }

    keyword_receive = request.form['keyword_give'].strip()
    data = requests.get(
        f'https://search.naver.com/search.naver?where=news&ie=utf8&sm=nws_hty&query={keyword_receive}',
        headers=headers)

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

    lis = soup.select('#main_pack > section > div > div.group_news > ul > li')

    doc = []

    for li in lis:
        a = li.select_one('a.news_tit').text
        # alink = a['href']  <-- 이게 문제입니다.
        media = li.select_one('a.info.press').text
        media = media.replace('언론사 선정', '')
        print(a, media)
        doc.append({'title': a,
                    # 'url': alink,
                    'media': media
                   })

    print(doc)
    return jsonify({'result': doc})

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


클라쪽 코드

function realnews() {

    $('#newslist').empty()

    let keyword = $('#keyword').val()

    $.ajax({
        type: 'POST',
        url: '/realnews',
        data: { keyword_give: keyword },
        success: function (response) {
            console.log("성공", response['result']);
            let rows = response['result']
          
            for (let i = 0; i < rows.length; i++) {
                let title = rows[i]['title']
                // let url = rows[i]['alink'] <-- 에러가 나기 때문에...
                let media = rows[i]['media']
                if (i % 2 == 0) {
                    var str_bgcolor = 'color-hunt-set1-1'
                } else {
                    var str_bgcolor = ''
                }

                let temp_html = `<li class="${str_bgcolor}">
                                  ${i + 1} ${title} <-- 에러가 해결되면 링크 등 추가 예정...
                                </li>`

                $('#newslist').append(temp_html)
            }
        }
    });
}



보고 계신 화면 전체를 캡처해 주시면, 튜터님들이 빠르게 상황을 상황을 이해할 수 있어요.

스파르타 즉문즉답



참고로 4번부터 나온건... 위에 네비바에 가려서 그렇습니다. 그건 조정하면 되는데...



취소
 공유
취소
댓글 0
댓글 알림
나의얼굴