지난번에 이어서 크롤링을 통해서 내 블로그가 몇 번째로 검색되는지 확인하는 코드를 작성해 보겠습니다.(지난번 포스트를 못 보셨으면 아래 링크를 참고하세요)
2020/11/29 - [파이썬/Python Project] - 파이썬 크롤링 해서 내 블로그 검색 순위 알아보기
파이썬 크롤링 해서 내 블로그 검색 순위 알아보기
TV를 보다가 갑자기 "내 블로그가 몇 번째로 검색이 될까?" 하는 궁금증이 생기기 시작했습니다. 갑자기 생긴 궁금증은 해결이 될 때까지 저를 가만두지 않았습니다. 결국 노트북으로 와서 코딩
dotsnlines.tistory.com
지난번에 포스트에서 작성한 코드는 파이참이 있어야만 실행이 가능합니다.
코딩을 할 줄 모르는 우리 마눌님을 위해서 UI도 만들고 실행파일로 만들어서 누구나 쉽게 사용할 수 있도록 해 보겠습니다.
우선 qt designer를 엽니다. 그리고 MainWindow를 만듭니다.
UI는 이렇게 구성해서 만들었습니다. (아나콘다를 설치했는데 qt designer가 어디있는지 모르신다면 아래 링크를 참고하세요)
2020/11/18 - [파이썬/PyQt5] - PyQt5 - qt designer 파일 위치
PyQt5 - qt designer 파일 위치
아나콘다(Anaconda3)를 설치하고 나서 qt designer 위치를 찾느라 헤메었네요. 비전공자에다 40대 아저씨가 코딩을 시작하려고 하니 엄청 힘든점이 많네요. designer 위치는 아래 경로에 있습니다. Anaconda
dotsnlines.tistory.com
검색어 입력란은 lineEdit으로 만들었고 밑에 네모박스는 결과가 나오는 창인데 textEdit으로 만들었습니다.
lineEdit은 한 줄만 표시되는데 반해 textEdit은 여러줄 표시가 가능하기 때문입니다.
아울러 위 그림에 "검색어를 입려하세요" 밑에는 labe을 하나 더 만들어서 검색이 완료되면 알려주는 역할을 합니다.
우선 pyqt 기본 코드를 작성합니다
from PyQt5.QtWidgets import * from PyQt5 import uic import sys import requests from bs4 import BeautifulSoup class MyWindow(QMainWindow): def __init__(self): QMainWindow.__init__(self, None) uic.loadUi(blog_ui, self) ~~~~~~~~~~~내용입력~~~~~~~~~~~~~~ if __name__ == '__main__': app = QApplication(sys.argv) Dialog = MyWindow() Dialog.show() app.exec_() |
pyqt는 한 달만에 다시 보는데 볼때 마다 새롭네요. 파이썬에서 제일 어려운 것 같아요.
위에서 qtdesigner로 만든 ui 파일위치를 'blog_ui'라는 변수에 넣어주고, 'uic.loadUi(blog_ui, self)' 를 써서 ui를 로드해 줍니다.
위의 코드에서 '~~내용입력~~'란에 지난번에 만든 코드와 mainwindow의 각 개체(버튼, 입력창, 출력창)을 연결해 주면 됩니다.
self.pushButton.clicked.connect(self.pushButtonClicked) self.lineEdit.textChanged.connect(self.line_changed) |
pushbutton 이 클릭했을때 실행하도록 연결하고, 입력창에 단어가 바뀌었을때 결과를 나타내는 lable과 연결합니다.
def line_changed(self): self.label_end.setText('') |
결과를 나타내는 label을 변하게 하는 함수입니다. 'label_end'가 label의 이름이며, 입력창의 글자가 변하면 공백으로 변하게 합니다.
def pushButtonClicked(self): url = 'https://search.naver.com/search.naver?display=10&f=&filetype=0&page=2&query=' url_a = '&research_url=&sm=tab_pge&start=' url_b = '&where=web' myblog = 'dotsnlines.tistory.com' keyword = self.lineEdit.text()
for No in range(0, 10): result = requests.get(url + keyword + url_a + str(No * 10 + 1) + url_b) bs_obj = BeautifulSoup(result.content, 'html.parser')
div = bs_obj.find('div', class_='api_subject_bx') ul = div.find('ul') lis = ul.find_all('li')
for num, li in enumerate(lis): a = li.find('a')['href'] blog = a.split('/') if blog[2] == myblog: exist = self.textEdit.toPlainText() self.textEdit.setText(exist + str(No * 10 + num + 1) + '번째로 검색 되었습니다' + str(a)+'\n') self.label_end.setText('검색이 완료되었습니다.')
|
지난번 만든 코드를 함수로 리팩토링? 했습니다.(용어가 적절한지 모르겠네요)
함수안의 내용은 지난번 포스트를 참고 하시기 바라며(본 포스트의 맨 위에 링크했어요), 결과는 lineEdit에 표시됩니다.
모든 과정이 끝나면 label에 완료가 되었다고 표시됩니다.
이제 실행을 시켜 보겠습니다.
실행시키니 창이 잘 뜨네요
검색어를 입력하고 "검색시작" 버튼을 눌러 보겠습니다.
검색 결과가 잘 나오네요.
네이버를 실제 검색해 보니깐 10page의 검색결과만 제공하더라구요. 그 이상은 볼 수 없게 되어있어요.
처음에 네이버에서 100page 까지 검색이 되도록 하였는데, 다시 10page만 검색 되도록 만들었습니다.
상위 100개 안에 내 블로그가 안 나오면 결과값이 나오지 않습니다.(제 블로그는 검색해도 안 나오는 항목이 많네요. ㅠㅠ)
이제 실행파일을 만들어 보겠습니다.
파이썬 파일이 있는 폴더에서 마우스 왼쪽 클릭해서 PowerSheel 창을 엽니다.
pyinstaller를 이용해서 옵션을 주고 실행파일을 만들어줍니다.
완료가 되었습니다.
뭔가 많은 파일이 만들어진 것 같네요
우리가 원하는 실행파일은 'dist' 폴더안에 있어요.
필요한 파일만 폴더를 만들어서 따로 옮겼습니다.
exe 파일을 실행하시면 됩니다. 잘 실행 되네요.^^
전체 코드는 아래와 같습니다..↓
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
from PyQt5.QtWidgets import *
from PyQt5 import uic
import sys
import requests
from bs4 import BeautifulSoup
blog_ui = '.\\blogrank.ui'
class MyWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self, None)
uic.loadUi(blog_ui, self)
self.pushButton.clicked.connect(self.pushButtonClicked)
self.lineEdit.textChanged.connect(self.line_changed)
def line_changed(self):
self.label_end.setText('')
def pushButtonClicked(self):
url = 'https://search.naver.com/search.naver?display=10&f=&filetype=0&page=2&query='
url_a = '&research_url=&sm=tab_pge&start='
url_b = '&where=web'
myblog = 'dotsnlines.tistory.com'
keyword = self.lineEdit.text()
for No in range(0, 10):
result = requests.get(url + keyword + url_a + str(No * 10 + 1) + url_b)
bs_obj = BeautifulSoup(result.content, 'html.parser')
div = bs_obj.find('div', class_='api_subject_bx')
ul = div.find('ul')
lis = ul.find_all('li')
for num, li in enumerate(lis):
a = li.find('a')['href']
blog = a.split('/')
if blog[2] == myblog:
exist = self.textEdit.toPlainText()
self.textEdit.setText(exist + str(No * 10 + num + 1) + '번째로 검색 되었습니다' + str(a)+'\n')
self.label_end.setText('검색이 완료되었습니다.')
if __name__ == '__main__':
app = QApplication(sys.argv)
Dialog = MyWindow()
Dialog.show()
app.exec_()
|
cs |
댓글