2 글 보임 - 1 에서 2 까지 (총 2 중에서)
-
글쓴이글
-
2023년 5월 25일 21:27 #84571
11:36참가자안녕하세요. 재미있게 강의해주셔서 코딩이란 걸 시도해보게 되었습니다. 진심으로 감사드립니다. 강의를 듣고 웹 크롤러를 만들었습니다. 이후 다른 컴퓨터에서 간단하게 사용하고 싶어 pynstaller로 실행파일로 만들었습니다. (gpt의 조언에 따라) 그런데 그렇게 만들어진 exe파일을 실행하면, vscode와 다르게 중간에 멈춰버리고 맙니다. vscode에선 총 10개의 워드파일로 저장되는데, exe파일로 하면 3개만 저장되고, 두번째 시도하면 빈 폴더만 생성됩니다. gpt랑 4시간 동안 대화했는데도 모르겠어서 질문 남깁니다 ㅠ 초보 질문이지만 꼭 조언 부탁드립니다 ㅠㅠ 전체코드는 아래와 같습니다.
# 1. 뷰탭에서 각 블로그 글의 URL 가져오기
# 필요한 라이브러리를 가져옵니다. import requests import urllib from bs4 import BeautifulSoup
# 사용자가 주제를 입력합니다. search_query = input("주제를 입력하세요 :")
# 주제를 URL 인코딩합니다. url_encoded_query = urllib.parse.quote(search_query)
# GET 요청을 할 URL을 완성합니다. url = f"https://search.naver.com/search.naver?where=view&sm=tab_jum&query={url_encoded_query}" # print(url)
# 위 네이버 url에 GET 요청을 보내고, 응답을 받아옵니다. data_viewtap = requests.get(url) # print(data_viewtap.status_code)
# 응답내용을 파싱하여 BeautifulSoup 객체를 생성합니다. soup_data_viewtap = BeautifulSoup(data_viewtap.content, 'html.parser') # print(soup_data_viewtap)
# 파싱된 HTML에서 class속성을 갖고 있는 a태그를 찾습니다. (크롤링할 영역) html_data_viewtap = soup_data_viewtap.find_all('a', class_="api_txt_lines total_tit _cross_trigger")
# html_data_viewtap 내에서 상위 10개 링크를 찾아 links_post 리스트에 저장합니다. links_of_post = [] for i in range(10): # 10번 반복합니다. link = html_data_viewtap[i].get('href') # 각 a태그에서 링크를 가져옵니다. links_of_post.append(link) # 링크를 리스트에 추가합니다.
# 2. 각 블로그에 들어가 본문 수집하기
# 상위 10개 링크(links_post 리스트)에 GET 요청을 보내 응답을 받아옵니다. posts = [] for i in range(10): # 10번 반복합니다. response_of_post = requests.get(links_of_post[i]) # 위에서 얻은 링크 리스트의 0번부터 응답을 받아옵니다. posts.append(response_of_post) # 응답을 posts 리스트에 저장합니다.
# 상위 10개 포스트의 내용(posts)을 파싱하여 Beautifulsoup 객체를 생성합니다. soup_posts = [] for i in range(10): # 10번 반복합니다. soup_post = BeautifulSoup(posts[i].content, 'html.parser') soup_posts.append(soup_post)
# 상위노출 10개의 블로그 포스팅에 iframe 있는지 확인하고 # iframe이 있다면 src를 찾아 진짜 url에 GET을 하고, 파싱 # iframe이 없다면 그,대로 파싱하여 contents 리스트에 저장합니다. contents = [] for i in range(10): iframe = soup_posts[i].find('iframe')
if iframe and iframe.get('src'): # iframe이 있다면 iframe_src = iframe.get('src') # iframe의 src 속성을 가져옵니다. base_url = "https://blog.naver.com" real_url = base_url + iframe_src
# 실제 URL로 다시 요청을 보내서 본문을 가져옵니다. content_iframe = requests.get(real_url) soup_content_iframe = BeautifulSoup(content_iframe.content, 'html.parser') content = soup_content_iframe.find_all('p', class_='se-text-paragraph') contents.append(content)
else: # iframe이 없다면 웹페이지의 본문을 직접 파싱합니다. content = soup_posts[i].find_all('p', class_='se-text-paragraph') contents.append(content) # print(contents[0])
# 3. 파싱한 본문 컨텐츠 편집하기
# 본문 컨텐츠에서 HTML을 없애고 텍스트만 추출합니다. # 한 개의 글 안에서 모든 문장을 하나로 합칩니다. # 파일 저장을 위해 개행문자와 공백을 제거합니다.
content_text = [] for content in contents: # 각 블로그 글에 대해 반복합니다. paragraphs = [tag.text for tag in content] # .text로 텍스트를 추출한 후, paragraph라는 리스트에 저장합니다. content_nohtml = ' '.join(paragraphs) # prargraph 리스트의 모든 요소를 하나의 문자열로 합칩니다. content_nohtml = content_nohtml.replace('\n', ' ') # 모든 개행 문자를 공백으로 변환 content_nohtml = content_nohtml.strip() # 문자열 양쪽의 공백을 제거 content_text.append(content_nohtml) # 완성된 문자열을 content_text 리스트에 추가합니다.
# print(content_text[0]) # 첫 번째 블로그 글의 모든 문단을 출력합니다.
# 4. 편집한 컨텐츠를 MS 워드 파일로 저장하기
# 필요한 라이브러리를 가져옵니다. import os from docx import Document
# '검색어' 이름의 신규 폴더를 생성합니다. 폴더가 이미 존재하는 경우에는 생성하지 않습니다. if not os.path.exists(search_query): os.mkdir(search_query)
# 각 블로그 글에 대해 반복합니다. for i, post in enumerate(content_text): doc = Document() # 새로운 Word 문서를 생성합니다. doc.add_paragraph(post) # 블로그 글의 내용을 문서에 추가합니다. doc.save(os.path.join(search_query, f'{search_query}_{i+1}.docx')) # 문서를 '[검색어]/[검색어]_[숫자].docx' 파일로 저장합니다. 라이브러리와 파이썬 버전의 호환?? 이런 걸 보라고 해서 본 건 아래와 같습니다. python --version Python 3.11.3 PS C:\Users\Documents\크롤러> pip list Package Version ------------------------- -------- aiofiles 23.1.0 aiohttp 3.8.4 aiosignal 1.3.1 altair 5.0.0 altgraph 0.17.3 anyio 3.6.2 async-timeout 4.0.2 attrs 23.1.0 beautifulsoup4 4.12.2 bs4 0.0.1 certifi 2023.5.7 charset-normalizer 3.1.0 click 8.1.3 colorama 0.4.6 contourpy 1.0.7 cycler 0.11.0 fastapi 0.95.2 ffmpy 0.3.0 filelock 3.12.0 fonttools 4.39.4 frozenlist 1.3.3 fsspec 2023.5.0 gradio 3.32.0 gradio_client 0.2.5 h11 0.14.0 httpcore 0.17.2 httpx 0.24.1 huggingface-hub 0.14.1 idna 3.4 Jinja2 3.1.2 jsonschema 4.17.3 kiwisolver 1.4.4 linkify-it-py 2.0.2 lxml 4.9.2 markdown-it-py 2.2.0 MarkupSafe 2.1.2 matplotlib 3.7.1 mdit-py-plugins 0.3.3 mdurl 0.1.2 multidict 6.0.4 numpy 1.24.3 openai 0.27.6 orjson 3.8.13 packaging 23.1 pandas 2.0.1 pefile 2023.2.7 Pillow 9.5.0 pip 23.1.2 pydantic 1.10.8 pydub 0.25.1 Pygments 2.15.1 pyinstaller 5.11.0 pyinstaller-hooks-contrib 2023.3 pyparsing 3.0.9 pyrsistent 0.19.3 python-dateutil 2.8.2 python-docx 0.8.11 python-multipart 0.0.6 pytz 2023.3 pywin32-ctypes 0.2.0 PyYAML 6.0 requests 2.30.0 semantic-version 2.10.0 setuptools 65.5.0 six 1.16.0 sniffio 1.3.0 soupsieve 2.4.1 starlette 0.27.0 toolz 0.12.0 tqdm 4.65.0 typing_extensions 4.6.1 tzdata 2023.3 uc-micro-py 1.0.2 urllib3 2.0.2 uvicorn 0.22.0 websockets 11.0.3 yarl 1.9.2 PS C:\Users\Documents\크롤러> gpt가 파일 읽기 쓰기 권한이 문제라고 해서 시키는대로 했더니 그 문제는 아니라고 합니다. 절대경로, 상대경로 하는 것도 일단 gpt가 시키는 대로 따라했을 땐 전부 다 수정해도 해결되지 않았습니다..ㅠㅠ 살려주십시오!!!!
2023년 5월 26일 09:50 #84594
codingapple키 마스터파일만드는 부분은 절대경로로 다 바꿉시다 터미널에서 그 파일 실행해보면 print들도 나올텐데 그거보고 어떤부분이 안되는지부터 찾아봐야합니다
-
글쓴이글
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
- 답변은 로그인 후 가능합니다.