테스트 사이트 - 개발 중인 베타 버전입니다

파이썬 출력결과를 html에 옮길 수 있나요? 채택완료

초보자아 2년 전 조회 2,262

파이썬 오늘 처음해보는데 크롤링한 결과물을 html에 보이도록 하고싶습니다.

검색하면서 크롤링하는건 어찌저찌 성공했는데 결과물을 html로 옮기려니 막막하네요..

기본지식도 없이 검색으로만 할려니 너무 어렵구요..

뭘 더 추가해야할지 뭘 더 수정해야할지 감이 안잡힙니다...

파이썬 고수분들 도와주세요 ㅜㅜ

 

</strong></p>

<p>import requests</p>

<p>from bs4 import BeautifulSoup</p>

<p>from urllib.parse import quote</p>

<p> </p>

<p>query = "sk하이닉스"</p>

<p>url = "<a href="https://search.naver.com/search.naver?where=view&sm=tab_jum&query="" target="_blank" rel="noopener noreferrer">https://search.naver.com/search.naver?where=view&sm=tab_jum&query="</a> + quote(query)</p>

<p> </p>

<p>headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"}</p>

<p>res = requests.get(url, headers=headers)</p>

<p>soup = BeautifulSoup(res.text, "lxml")</p>

<p> </p>

<p>posts = soup.find_all("li", attrs={"class":"bx _svp_item"})</p>

<p> </p>

<p>for post in posts:</p>

<p>    post_link = post.find("a", attrs={"class":"api_txt_lines total_tit _cross_trigger"})['href']</p>

<p>    print("link :",post_link)</p>

<p>    post_title = post.find("a", attrs={"class":"api_txt_lines total_tit _cross_trigger"}).get_text()</p>

<p>    print("제목 :",post_title)</p>

<p>    post_content = post.find("div", attrs={"class":"api_txt_lines dsc_txt"}).get_text()</p>

<p>    print("내용 :",post_content)</p>

<p>    print("-"*50)</p>

<p><strong>

 

 

 

</strong></p>

<p>    <section class="sc"></p>

<p>        <div class="container"></p>

<p>            {% for post in posts %}</p>

<p>            <div class="wapper"></p>

<p>                <div></p>

<p>                    <a href="{% post_link %}"></p>

<p>                        <h1>{% post_title %}</h1></p>

<p>                        <p>{% post_content %}</p></p>

<p>                    </a></p>

<p>                </div></p>

<p>            </div></p>

<p>            {% endfor %}</p>

<p>        </div></p>

<p>    </section></p>

<p><strong>

 

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

채택된 답변
+20 포인트

크롤링한 결과물을 HTML에 보이도록 하기 위해서는 파이썬으로 HTML 템플릿을 만들고,  크롤링한 데이터를 템플릿에 적용하여 HTML 파일을 생성해야 합니다. 아래는 예시 코드입니다.

python

import requests

from bs4 import BeautifulSoup

from urllib.parse import quote

from jinja2 import Template</p>

<p>query = "sk하이닉스"

url = "<a href="https://search.naver.com/search.naver?where=view&sm=tab_jum&query="" target="_blank" rel="noopener noreferrer">https://search.naver.com/search.naver?where=view&sm=tab_jum&query="</a> + quote(query)</p>

<p>headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"}

res = requests.get(url, headers=headers)

soup = BeautifulSoup(res.text, "lxml")</p>

<p>posts = soup.find_all("li", attrs={"class":"bx _svp_item"})</p>

<p># 크롤링한 데이터를 저장할 리스트 생성

data = []</p>

<p>for post in posts:

    post_link = post.find("a", attrs={"class":"api_txt_lines total_tit _cross_trigger"})['href']

    post_title = post.find("a", attrs={"class":"api_txt_lines total_tit _cross_trigger"}).get_text()

    post_content = post.find("div", attrs={"class":"api_txt_lines dsc_txt"}).get_text()

    

    # 크롤링한 데이터를 딕셔너리로 저장하여 리스트에 추가

    data.append({

        'link': post_link,

        'title': post_title,

        'content': post_content

    })</p>

<p># HTML 템플릿 작성

html_template = """

<section class="sc">

    <div class="container">

        {% for post in data %}

        <div class="wapper">

            <div>

                <a href="{{ post['link'] }}">

                    <h1>{{ post['title'] }}</h1>

                    <p>{{ post['content'] }}</p>

                </a>

            </div>

        </div>

        {% endfor %}

    </div>

</section>

"""</p>

<p># Jinja2 템플릿 엔진을 사용하여 템플릿을 렌더링하여 HTML 파일 생성

template = Template(html_template)

html_output = template.render(data=data)</p>

<p># 생성된 HTML 파일 저장

with open("output.html", "w", encoding="utf-8") as f:

    f.write(html_output)</p>

<p>

위의 코드에서는 Jinja2 템플릿 엔진을 사용하여 HTML 템플릿을 작성하였습니다.  크롤링한 데이터는 data 리스트에 딕셔너리 형태로 저장한 후, render() 메서드를 사용하여 템플릿을 렌더링합니다.  렌더링된 결과를 output.html 파일로 저장합니다.

HTML 템플릿에서는 {% for %} 문을 사용하여 데이터를 반복하고, {{ }}로 각각의 데이터 항목에 접근합니다.

실행 후 output.html 파일을 열어보면 크롤링한 데이터가 HTML에

챗GPT 답변입니다.

 

2번째 답변

크롤링한 결과물을 HTML에 표시하기 위해서는 파이썬에서 가져온 데이터를 HTML 템플릿에 적용하여 동적으로 HTML을 생성해야 합니다. 여기서는 Jinja2 템플릿 엔진을 사용하여 데이터를 HTML로 렌더링하는 방법을 안내해 드리겠습니다.

먼저, Jinja2를 설치해야 합니다. 아래의 명령을 사용하여 설치할 수 있습니다.

pip install jinja2

설치가 완료되었다면, 파이썬 코드에서 HTML 템플릿을 작성하여 데이터를 적용해 보겠습니다. 아래는 코드를 수정한 예시입니다.

import requests

from bs4 import BeautifulSoup

from urllib.parse import quote

from jinja2 import Template</p>

<p>query = "sk하이닉스"

url = "<a href="https://search.naver.com/search.naver?where=view&sm=tab_jum&query="" target="_blank" rel="noopener noreferrer">https://search.naver.com/search.naver?where=view&sm=tab_jum&query="</a> + quote(query)</p>

<p>headers = {

    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"

}

res = requests.get(url, headers=headers)

soup = BeautifulSoup(res.text, "lxml")</p>

<p>posts = soup.find_all("li", attrs={"class": "bx _svp_item"})</p>

<p># 데이터를 담을 리스트

data = []</p>

<p>for post in posts:

    post_link = post.find("a", attrs={"class": "api_txt_lines total_tit _cross_trigger"})["href"]

    post_title = post.find("a", attrs={"class": "api_txt_lines total_tit _cross_trigger"}).get_text()

    post_content = post.find("div", attrs={"class": "api_txt_lines dsc_txt"}).get_text()

    

    # 데이터를 딕셔너리 형태로 추가

    data.append({

        "post_link": post_link,

        "post_title": post_title,

        "post_content": post_content

    })</p>

<p># HTML 템플릿을 작성

template_str = """

<section class="sc">

    <div class="container">

        {% for post in posts %}

        <div class="wapper">

            <div>

                <a href="{{ post.post_link }}">

                    <h1>{{ post.post_title }}</h1>

                    <p>{{ post.post_content }}</p>

                </a>

            </div>

        </div>

        {% endfor %}

    </div>

</section>

"""</p>

<p># 템플릿 생성

template = Template(template_str)</p>

<p># 템플릿에 데이터를 적용하여 HTML 생성

html = template.render(posts=data)</p>

<p># 생성된 HTML 출력

print(html)</p>

<p>

위의 코드에서는 크롤링한 데이터를 data 리스트에 딕셔너리 형태로 추가합니다.  그리고 HTML 템플릿을 작성한 후, Template 클래스를 사용하여 템플릿을 컴파일합니다.  template.render(posts=data) 코드에서 posts에 데이터를 적용하여 HTML을 생성합니다.  생성된 HTML은 html 변수

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

초보자아
2년 전
핵심은 크롤링한 데이터를 data리스트에 추가하고 html 템플릿을 만드는거군요! 많이 배워갑니다! 코드를 보면서 차근차근 더 해보겠습니다 감사합니다!

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인