웹페이지 크롤링데이터를 테이블위젯에 뿌려주는 예제[exam5_crawl] > [파이썬]기초실습예제

본문 바로가기
사이트 내 전체검색

[파이썬]기초실습예제

게시판 상단

웹페이지 크롤링데이터를 테이블위젯에 뿌려주는 예제[exam5_crawl]

페이지 정보

작성자 관리자 댓글 0건 조회 786회 작성일 21-08-21 23:20

본문

[exam4_crawl]에서 크롤링한 데이터를 qtdesigner에서 생성한 폼에 있는

tablewidget에 뿌려주는 예제입니다


주식코드 값은 사용자가 입력한 값을 가져옴


사전에 qtdesginer를 실행하여 윈도우폼(main window)을 만들고 테이블위젯(tablewidget)을 화면에 만들어주고 name은 크롤링데이터 가져오기로 수정하고 objectnametable2로 변경해줍니다


위젯 선택후 마우스 우측버튼/항목편집에서 날짜,종가 항목을 추가해준다

puch button를 폼에 추가해주고 오른쪽 속성창에서 name은 가져오기로 수정하고 objectname btn_1으로 변경합니다


lineedit를 폼에 추가하고 objectnamelineedit2로 수정함

[exam5_crawl.ui]라는 이름으로 저장합니다.



ea4f6e87b162dc52a7f0c8419b9fbe30_1629555458_1816.JPG



실행화면

ea4f6e87b162dc52a7f0c8419b9fbe30_1629555496_856.JPG
 


코드설명

#웹크롤링에 필요한 라이브러리
import requests
from bs4 import BeautifulSoup

#윈도우폼에 필요한 라이브러리
import sys  # 윈도우 폼의 sys.argv에서 필요한 라이브러리
from PyQt5.QtWidgets import *
from PyQt5 import uic


form_class2 = uic.loadUiType(
"exam5_crawl.ui")[0]

#화면을 띄우는데 사용되는 Class 선언
class WindowClass(QMainWindow, form_class2):
   
def __init__(self):
       
super().__init__()
       
self.setupUi(self)

       
# 윈도우가 실행되면 초기값으로 삼성전자 코드를 넣음
       
self.lineedit2.setText("005930")

       
#버튼에 기능을 연결하는 코드
       
self.btn_1.clicked.connect(self.f_btn_1)

       
#폼에서 함수를 사용시에는 클래스 내에서 선언하여 사용하며,들여쓰기 하는 것에 주의
   
def f_btn_1(self):  #버튼 클릭시 크롤링한 데이터를 테이블위젯에 세팅해주는 부분
       
ls_contents2 = []

        ls_code2 =
self.lineedit2.text()  #입력한 주식코드값을 가져옴
       
print(ls_code2)

        li_page =
5
       
self.table2.setRowCount(0# 데이터를 세팅하기 전에 기존에 있는 행을 전체 삭제를 해준다
       
for i in range(li_page):  # 보통 for문에서는 i,j,k 이런변수를 사용함, i 0-4
           
ls_address = "https://finance.naver.com/item/sise_day.nhn?code=" + str(ls_code2) + "&page=" + str(i + 1)
            ls_req = requests.get(ls_address
, headers={'User-agent': 'Mozilla/5.0'})  # header부분을 적지 않으면 페이지를 못가져옴
           
ls_html = ls_req.content
            ls_soup = BeautifulSoup(ls_html
, "html.parser"# 이 부분에서실제 html소스코드 형태의 값을 가져온다.
           
tr = ls_soup.select('table > tr'# table태그의 자식태그 tr을 가져옴
           
for j in range(1, len(tr) - 1):
               
if tr[j].select('td')[0].text.strip():  # td안에서 텍스트만 가져옴, tr태그중에는 td에 값이 없는 것들은 츨력을 안함
                   
ls_contents2.append(tr[j].select('td')[0].text.strip())  # 날짜
                   
ls_contents2.append(tr[j].select('td')[1].text.strip())  # 종가

                   
#위젯에 크롤링한 데이터를 세팅해줌table2위 테이블위젯의 objectname
                   
li_row = self.table2.rowCount() #전체 행의 수,기존에 행이 존재한다면 그 마지막 행의 뒤로 추가가 된다
                   
self.table2.insertRow(li_row)  #테이블위젯에 새로운 행을 추가해준다
                   
self.table2.setItem(li_row, 0, QTableWidgetItem(tr[j].select('td')[0].text.strip()))
                   
self.table2.setItem(li_row, 1, QTableWidgetItem(tr[j].select('td')[1].text.strip()))

       
print(ls_contents2)  # 일자와 종가를 가져옴,데이터를 알맞게 가져왔는지 검증하기 위해 출력해봄



if __name__ == "__main__" :
    app = QApplication(sys.argv)
    myWindow = WindowClass() 
#클래스의 인스턴스 생성
   
myWindow.show() #화면을 보여줌
   
app.exec_()

 

 


첨부파일

댓글목록

등록된 댓글이 없습니다.

게시판 하단

회원로그인

접속자집계

오늘
1
어제
13
최대
221
전체
17,037

그누보드5
Copyright © 소유하신 도메인. All rights reserved.