파이썬 출력결과를 html에 옮길 수 있나요?
본문
파이썬 오늘 처음해보는데 크롤링한 결과물을 html에 보이도록 하고싶습니다.
검색하면서 크롤링하는건 어찌저찌 성공했는데 결과물을 html로 옮기려니 막막하네요..
기본지식도 없이 검색으로만 할려니 너무 어렵구요..
뭘 더 추가해야할지 뭘 더 수정해야할지 감이 안잡힙니다...
파이썬 고수분들 도와주세요 ㅜㅜ
import requests
from bs4 import BeautifulSoup
from urllib.parse import quote
query = "sk하이닉스"
url = "https://search.naver.com/search.naver?where=view&sm=tab_jum&query=" + quote(query)
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")
posts = soup.find_all("li", attrs={"class":"bx _svp_item"})
for post in posts:
post_link = post.find("a", attrs={"class":"api_txt_lines total_tit _cross_trigger"})['href']
print("link :",post_link)
post_title = post.find("a", attrs={"class":"api_txt_lines total_tit _cross_trigger"}).get_text()
print("제목 :",post_title)
post_content = post.find("div", attrs={"class":"api_txt_lines dsc_txt"}).get_text()
print("내용 :",post_content)
print("-"*50)
<section class="sc">
<div class="container">
{% for post in posts %}
<div class="wapper">
<div>
<a href="{% post_link %}">
<h1>{% post_title %}</h1>
<p>{% post_content %}</p>
</a>
</div>
</div>
{% endfor %}
</div>
</section>
!-->!-->
답변 1
크롤링한 결과물을 HTML에 보이도록 하기 위해서는 파이썬으로 HTML 템플릿을 만들고,
크롤링한 데이터를 템플릿에 적용하여 HTML 파일을 생성해야 합니다. 아래는 예시 코드입니다.
import requests
from bs4 import BeautifulSoup
from urllib.parse import quote
from jinja2 import Template
query = "sk하이닉스"
url = "https://search.naver.com/search.naver?where=view&sm=tab_jum&query=" + quote(query)
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")
posts = soup.find_all("li", attrs={"class":"bx _svp_item"})
# 크롤링한 데이터를 저장할 리스트 생성
data = []
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
})
# 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>
"""
# Jinja2 템플릿 엔진을 사용하여 템플릿을 렌더링하여 HTML 파일 생성
template = Template(html_template)
html_output = template.render(data=data)
# 생성된 HTML 파일 저장
with open("output.html", "w", encoding="utf-8") as f:
f.write(html_output)
위의 코드에서는 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
query = "sk하이닉스"
url = "https://search.naver.com/search.naver?where=view&sm=tab_jum&query=" + quote(query)
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")
posts = soup.find_all("li", attrs={"class": "bx _svp_item"})
# 데이터를 담을 리스트
data = []
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
})
# 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>
"""
# 템플릿 생성
template = Template(template_str)
# 템플릿에 데이터를 적용하여 HTML 생성
html = template.render(posts=data)
# 생성된 HTML 출력
print(html)
위의 코드에서는 크롤링한 데이터를 data 리스트에 딕셔너리 형태로 추가합니다.
그리고 HTML 템플릿을 작성한 후, Template 클래스를 사용하여 템플릿을 컴파일합니다.
template.render(posts=data) 코드에서 posts에 데이터를 적용하여 HTML을 생성합니다.
생성된 HTML은 html 변수