웹페이지 크롤링데이터를 테이블위젯에 뿌려주는 예제[exam5_crawl]
페이지 정보
작성자 관리자 댓글 0건 조회 786회 작성일 21-08-21 23:20본문
[exam4_crawl]에서 크롤링한 데이터를 qtdesigner에서 생성한 폼에 있는
tablewidget에 뿌려주는 예제입니다
주식코드 값은 사용자가 입력한 값을 가져옴
사전에 qtdesginer를 실행하여 윈도우폼(main window)을 만들고 테이블위젯(tablewidget)을 화면에 만들어주고 name은 크롤링데이터 가져오기로 수정하고 objectname은 table2로 변경해줍니다
위젯 선택후 마우스 우측버튼/항목편집에서 날짜,종가 항목을 추가해준다
puch button를 폼에 추가해주고 오른쪽 속성창에서 name은 가져오기로 수정하고 objectname은 btn_1으로 변경합니다
lineedit를 폼에 추가하고 objectname은 lineedit2로 수정함
[exam5_crawl.ui]라는 이름으로 저장합니다.
실행화면
코드설명
#웹크롤링에 필요한 라이브러리
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_()
첨부파일
- exam5_crawl.py (3.1K) 9회 다운로드 | DATE : 2021-08-21 23:20:22
- exam5_crawl.ui (2.0K) 13회 다운로드 | DATE : 2021-08-21 23:20:22
댓글목록
등록된 댓글이 없습니다.