본문 바로가기
my_lesson/_Python

Python - Starting guide [from install to hello world] Using Anaconda

by boolean 2018. 5. 26.
728x90

 

Python - Starting guide [from install to hello world]

python읗 이용하는 방법은 크게 두가지로 나뉜다

1. 운영체제에 직접 설치 (비추천)

2. 가상환경읗 이용한 설치 ( 추천: 글자는 가상환경을 이용해서 진행 하겠다.)

 

 

 

Python + Django  순서정리(요약 :

실제 이용은 순서정리(자세한) 이용바람

)

가상환경 설치 : [Miniconda | Anaconda |virtualenv] - 여기 에서는 Miniconda 이용[자세히 보기]

환경변수 설정까지 하녔으라 windows cmd 창에서 conda가 실행되지 않을경우 
cmd 창을 관리자모드로 열어서 conda init cmd.exe 명령어를 실행 시킨다.

가상환경 생성 : workspace>conda create -n myEnv python=3.7.3 - version python 3.7.3 으로 myEnv 생성

workspace ==>>exam) : C:\project\python\django_project

가상환경 이용 : workspace >conda activate myEnv

가상환경 설정 : <myEnv>workspace > pip insatall pylint - pylint 설치(문법관련 선택사항)

    <myEnv>workspace > pip insatall pylint-django - pylint-django 설치[자세히 보기]

    <myEnv>workspace > pip insatall jupyter - jupyter notebook 설치(선택사항)

    <myEnv>workspace > pip insatall django - django 설치

    <myEnv>workspace > jupyter notebook - jupyter notebook 실행(선택사항)

    <myEnv>workspace > django-admin startproject startDjango  - django project startDjango 생성

          startDjango project를 다양한 편집기에서 여는 방법(여기에서는 3가지만)

          1. code startDjango //(visual studio code 실행 단축키) 

          2. start devenv startDjango //(visual studio 2019 실행 단축키)

          3. start vim  startDjango (너무 가벼움) //(vim 편집기 사용 추천)

    <myEnv>workspace > cd startDjango  //startDjango 프로젝트 폴더 안으로 이동

    <myEnv>workspace\startDjango > python manage.py runserver //startDjango server 실행

- 앱을 만들고 모델을 생성/등록하고 슈퍼유저를 등록한다.[자세히보기]

Python + Django  순서정리(자세한)

    

빨간색은 주석(설명) 입니다. 꼭 읽어 보시고 다음줄로 이동 바랍니다.

 

파랑색은 경로 입니다.

 

녹색은 실제 입력해야 할 명령어 입니다.

 

 

 

testdjango 라는 project를 만들어 보겠읍니다.

 

먼저 testdjango 라는 project가 있으면 지우겠읍니다.

 

먼저 디렉토리 가 있는지 검색해 보겠읍니다.

F:\project\PYTHON>dir

2019-07-14  오전 07:42    <DIR>          .

2019-07-14  오전 07:42    <DIR>          ..

2019-06-26  오후 10:11    <DIR>          .ipynb_checkpoints

2019-07-09  오후 11:11    <DIR>          myDjango

2019-07-02  오후 10:55    <DIR>          startDjango

2019-07-09  오후 10:57    <DIR>          test

2019-07-14  오전 07:42    <DIR>          testdjango

2019-07-14  오전 07:22    <DIR>          weather

               0개 파일                   0 바이트

               8개 디렉터리  404,009,373,696 바이트 남음

 

testdjango 라는 프로젝트가 있으므로 해당 폴더를 하위 구조까지 삭제토록 하겠읍니다.

F:\project\PYTHON>rmdir /s testdjango

testdjango, 계속하시겠습니까(Y/N)? y

 

새로운 django project를 만들겠읍니다.

앞서서 적절한 가상환경으로 진입하겠읍니다.

적절한 가상환경 검색 

F:\project\PYTHON>conda info --envs

 

검색된 미리 만들어 놓은 가상환경을 사용하거나 다른 환경이 필요하면 새로 만들어서 이용합니다[새로운 가상환경 만들기|자세히 보기]

 

저는 python 3.7.3 version에서 작업할 것이므로 해당 버전으로 생성된 가상환경에 진입하겠읍니다.

F:\project\PYTHON>conda activate conPython37

 

testdjango라는 project를 만들겠읍니다

(conPython37) F:\project\PYTHON>django-admin startproject testdjango

 

새롭게 생성한 testdjango라는 프로젝트 폴더로 딘입하겠읍니다.

(conPython37) F:\project\PYTHON>cd testdjango

 

assembly라는 app을 추가 해보겠읍니다.

(conPython37) F:\project\PYTHON\testdjango>python manage.py startapp assembly

 

testdjango project의 내부 구조를확인해 보겠읍니다.

(conPython37) F:\project\PYTHON\testdjango>tree

DB 볼륨에 대한 폴더 경로의 목록입니다.

볼륨 일련 번호는 B25E-F5C1입니다.

F:.

├─assembly

│  └─migrations

└─testdjango

    └─__pycache__

 

현재까지의 데이터를 migrate(등록)하겠읍니다.

 

(conPython37) F:\project\PYTHON\testdjango>python manage.py migrate

Operations to perform:

  Apply all migrations: admin, auth, contenttypes, sessions

Running migrations:

  Applying contenttypes.0001_initial... OK

  Applying auth.0001_initial... OK

  Applying admin.0001_initial... OK

  Applying admin.0002_logentry_remove_auto_add... OK

  Applying admin.0003_logentry_add_action_flag_choices... OK

  Applying contenttypes.0002_remove_content_type_name... OK

  Applying auth.0002_alter_permission_name_max_length... OK

  Applying auth.0003_alter_user_email_max_length... OK

  Applying auth.0004_alter_user_username_opts... OK

  Applying auth.0005_alter_user_last_login_null... OK

  Applying auth.0006_require_contenttypes_0002... OK

  Applying auth.0007_alter_validators_add_error_messages... OK

  Applying auth.0008_alter_user_username_max_length... OK

  Applying auth.0009_alter_user_last_name_max_length... OK

  Applying auth.0010_alter_group_name_max_length... OK

  Applying auth.0011_update_proxy_permissions... OK

  Applying sessions.0001_initial... OK

 

admin(superuser)을 만들겠읍니다.

(conPython37) F:\project\PYTHON\testdjango>python manage.py createsuperuser

Username (leave blank to use 'administrator'): boolean

Email address: boolean@knou.ac.kr

Password:1234

Password (again):1234

Superuser created successfully.

 

admin user를 만들었으니 서버를 실행해보고 접속해 보겠읍니다.

현재 위치와 관련된 새 cmd창을 열기 위해 다음과 같이 입력해 봅시다.

(conPython37) F:\project\PYTHON\testdjango>start cmd /k python manage.py runserver

 

서버 실행 확인:

chrome web browser 주소란에 loclahose:8000 입력후 Enter

 

admin login :

localhost:8000/admin

글자 배경색

이 app은 현역 국회의원 리스트를 출력 해보는 것이 목표입니다

국회의원 한명 한명의 정보를 Members 라는 메뉴에 저장 해보겠읍니다.

현재는 Members page link가 없읍니다.

같이 생성 해보도록 하겠읍니다.

 

Members 라는 model을 생성하고 database에 등록해 보겠읍니다.

 

(conPython37) F:\project\PYTHON\testdjango>rem 원래는 visual stueio code 편집기에 django project를 로드하여 편집하여야 하나 경로 안내상의 문제 때문에 cmd로 하드코딩 하겠읍니다. 모델(database)생성

 

사용하는 편집기를 이용해  assembly\models.py를 다음과같이 수정 합시다

from django.db import models



# Create your models here.

class Member(models.Model):

	kr_name = models.CharField(max_length=20)
       //들여쓰기주의

 

 

assembly 라는 app읗 project에 등록 하겠읍니다.

 

사용하는 편집기를 이용해  testdjango.settings.py를 다음과같이 수정 합시다

 

# Application definition

 

INSTALLED_APPS = [

'django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

'assembly',

]

...

...

 

 

 

사용하는 편집기를 이용해  assembly/admin.py를 다음과같이 수정 합시다.

 

from django.contrib import admin

from .models import Member



# Register your models here.

admin.site.register(Member)

Member model을 admin 페이지에 migrate(등록)하겠읍니다.

(conPython37) F:\project\PYTHON\testdjango>python manage.py migrate assembly

Operations to perform:

  Apply all migrations: (none)

Running migrations:

  No migrations to apply.

  Your models have changes that are not yet reflected in a migration, and so won

't be applied.

  Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage

.py migrate' to apply them.

 

migrate : 생성된 것을 등록

makemigrations : 등록할 것을 생성

 

(conPython37) F:\project\PYTHON\testdjango>python manage.py makemigrations assembly

Migrations for 'assembly':

  assembly\migrations\0001_initial.py

    - Create model Member

 

(conPython37) F:\project\PYTHON\testdjango>python manage.py migrate

Operations to perform:

  Apply all migrations: admin, assembly, auth, contenttypes, sessions

Running migrations:

  Applying assembly.0001_initial... OK

 

Member link가 추가되었읍니다.

 

 

Member link를 클릭하십시오.

 

Member page에 표현될 국회의원을 추가하기 위해 대한민국 국회로 이동 해봅시다.

 

 

 

 

 

 

assembly폴더 아래에 packages라는 폴더가 없다면 만들고 그 폴더 안에 assembly_members.py라는 파일을 만들어서 사용하는 편집기를 통해 연다.

 

(conPython37) F:\project\PYTHON\testdjango>assembly\packages\assembly_members.py

 

import requests

from bs4 import BeautifulSoup as bs

 

url = 'http://www.assembly.go.kr/assm/memact/congressman/memCond/memCondListAjax.do?rowPerPage=300'

response = requests.get(url).text

soup = bs(response, 'html.parser')

results = soup.select('a[href*=jsMemPop]')

print(results)

 

assembly폴더 아래 packages 폴더 안에 있는 assembly_members.py 파일을 실행한다.

(conPython37) F:\project\PYTHON\testdjango>python assembly\packages\assembly_members.py

 

만약에 

no module named '....' 이 발생하면

해당하는 ...을 설치 해주면 된다 

pip install ...  <- 이런식으로

 

 

## 견본 입니다 실제 코드는 아래 업데이트 되었읍니다

import requests

from bs4 import BeautifulSoup as bs

 

url = 'http://www.assembly.go.kr/assm/memact/congressman/\

memCond/memCondListAjax.do?rowPerPage=300'

response = requests.get(url).text

soup = bs(response, 'html.parser')

results = soup.select('a[href*=jsMemPop]')

## print(results)

 

## kr_names 라는 빈 리스트 생성

kr_names = []

 

## kr_names 리스트에 크롤링한 배열의 text 형태만 저장

for kr_name in results:

kr_names.append(kr_name.text)

 

## kr_names 리스트 출력

for i in range(0,len(kr_names)):

print(kr_names[i])

 

## 실제 코드 입니다 return을 print로 고치면 출력됩니다.

원하는 내용이 있는 웹페이지를 크롤링 해와서 정규식을 통하여 원하는 세부내용을 추출해 내는

코드입니다.

 

import re
import requests
from bs4 import BeautifulSoup as bs



url = 'http://www.assembly.go.kr/assm/memact/congressman/\
memCond/memCondListAjax.do?rowPerPage=300'

response = requests.get(url).text
#print(response)

soup = bs(response, 'html.parser')
#print(soup)



def get_assembly_id():
	results = soup.select('a[href*=jsMemPop]')
	id_r = r'[0-9]{7}'
	assembly_ids = []

	for result in results:
		result_id = result['href']
		matched_id = re.search(id_r, result_id)
		if matched_id:
		assembly_id = matched_id.group()
		else:
		assembly_id = None
		assembly_ids.append(assembly_id)
	return (assembly_ids)



def get_kr_names():
	results = soup.select('a[href*=jsMemPop]')
	kr_r = r'[가-힣]+'
	kr_names = []

	for result in results:
		result_text = result.text
		matched_text = re.search(kr_r, result_text)
		if matched_text:
		kr_name = matched_text.group()
		else:
		kr_name = None
		kr_names.append(kr_name)
	return (kr_names)



def get_chi_names():
	results = soup.select('span.chi')
	#print(results)
	chi_r = r'[一-龥]+'
	chi_names = []

	for result in results:
		#print(result)
		result_text = result.text
		matched_text = re.search(chi_r, result_text)
		if matched_text:
		chi_name = matched_text.group()
		else:
		chi_name = None
		chi_names.append(chi_name)
	return (chi_names)



def get_en_names():
	results = soup.select('div.memberna_list dl dt')
	en_r = r'([a-zA-Z]+\s)+([a-zA-Z]+)'
	en_names = []

	for result in results:
		result_text = result.text
		matched_text = re.search(en_r, result_text)
		if matched_text:
		en_name = matched_text.group()
		else:
		en_name = None
		en_names.append(en_name)
	return (en_names)



get_assembly_id()

get_kr_names()

get_chi_names()

get_en_names()

 

(conPython37) F:\project\PYTHON\testdjango>python assembly\packages\assembly_members.py

 

 

(conPython37) F:\project\PYTHON\testdjango> start vim assembly\models.py

 

## models 아래와 같이 수정합니다.

from django.db import models

 

# Create your models here.

class Member(models.Model):

assembly_id = models.IntegerField(null=True)

kr_name = models.CharField(max_length=20)

chi_name = models.CharField(max_length=20, null=True)

en_name = models.CharField(max_length=20, null=True)

 

 

## 출력 옵션은 다 를 수 있읍니다. 

(conPython37) F:\project\PYTHON\testdjango>python manage.py migrate assembly

Operations to perform:

  Apply all migrations: (none)

Running migrations:

  No migrations to apply.

  Your models have changes that are not yet reflected in a migration, and so won

't be applied.

  Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage

.py migrate' to apply them.

 

(conPython37) F:\project\PYTHON\testdjango>python manage.py makemigrations assembly

Migrations for 'assembly':

  assembly\migrations\0001_initial.py

    - Create model Member

 

(conPython37) F:\project\PYTHON\testdjango>python manage.py migrate

Operations to perform:

  Apply all migrations: admin, assembly, auth, contenttypes, sessions

Running migrations:

  Applying assembly.0001_initial... OK

 

(conPython37) F:\project\PYTHON\testdjango>start cmd /k python manage.py runserver

(conPython37) F:\project\PYTHON\testdjango>start vim assembly_create.py

 

 

## 크롤링한 데이터를 DB에 업로드 합니다.

import os

import django

os.environ.setdefault("DJANGO_SETTINGS_MODULE", 'testdjango.settings')

django.setup()

 

from assembly.packages import assembly_members as assem

from assembly.models import Member

gid = assem.get_assembly_id()

kname = assem.get_kr_names()

cname = assem.get_chi_names()

ename = assem.get_en_names()

 

for i in range(0, len(gid)):

Member.objects.create(assembly_id=gid[i], kr_name=kname[i],\

chi_name=cname[i], en_name=ename[i])

 

 

## 300건 정도를 4개씩 하므로 시간이 걸릴 수 있읍니다 믈 한잔 하고 오세요  ^^

(conPython37) F:\project\PYTHON\testdjango>python assembly_create.py

 

 

 

 

 

 

 

 

 

403 Foribidden

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',}

headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'} headers = {'User-Agent':'Chrome/66.0.3359.181'} headers = {'User-Agent':'Mozilla/5.0', 'referer' : 'http://www.naver.com'}

import requests from bs4 import BeautifulSoup headers = {'User-Agent': 'Mozilla/5.0'} URL = 'http://www.naver.com' res = requests.get(URL, headers=headers) soup = BeautifulSoup(res.text) print(soup)

 

python crawling result save as file(파이썬 크롤링결과 파일로 저장)

import sys

sys.stdout = open ('soup_out.txt','a',-1, 'utf-8')

 

import sys

import re

import requests

from bs4 import BeautifulSoup as bs

headers = {

'referer': 'https://www.google.com/',

'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36'\

' (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',

}

url_start = 'https://www.google.com/search?q='

key_word = '%ED%85%80%EB%B8%94%EB%9F%AC'

url_middle = '&safe=vss&ei=44ctXZD8Ie6Wr7wPqtS-2A8&start='

url_end = '&sa=N&ved=0ahUKEwjQ-f_1_7jjAhVuy4sBHSqqD_sQ8tMDCH4&biw=955&bih=414'

urls = []

for num in range(0,1):

urls.append(url_start +key_word + url_middle + str(num*10) + url_end)

print(urls)

 

def get_search_link():

search_links = []

for url in urls:

response = requests.get(url, headers=headers).text

soup = bs(response, 'html.parser')

results = soup.select('#rso > div > div > div > div > div > div.r > a')

sys.stdout = open ('result.txt','w',-1,'utf-8')

print(results)

link_r = r'(https?:\/\/)?(www\.)([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?'

for result in results:

#print(result)

search_link = result.get('href')

print(search_link)

print(result.string)

search_links.append(search_link)

print (search_links)

 

get_search_link()



댓글