import requests
import lxml.html
import sqlite3
import time
import re
from bs4 import BeautifulSoup
con = sqlite3.connect('C:/Users/Admin/Downloads/sqlite-tools-win32-x86-3300100/sqlite-tools-win32-x86-3300100/testDB')
cur = con.cursor()
cur.execute('drop table if exists webtoon;')
cur.execute('create table webtoon(title text, author text, contents text, genre text, age text)')


session = requests.Session()
res = session.get('https://comic.naver.com/webtoon/weekday.nhn')
root = lxml.html.fromstring(res.content)
root.make_links_absolute(res.url)
for a in root.cssselect('.thumb a'):
    url = a.get('href')
    print('URL:', url)
    time.sleep(1)
    res = session.get(url)
    root = lxml.html.fromstring(res.content)
    title = root.cssselect('.detail h2')[0].text.strip()
    author = root.cssselect('.detail h2 span.wrt_nm')[0].text.strip()
    contents = root.cssselect('.detail p')[0].text.strip()
    genre = root.cssselect('.detail p span.genre')[0].text
    age = root.cssselect('.detail p span.age')[0].text
    print(title)
    print(author)
    print(description)
    print(genre)
    print(age)
    cur.execute('insert into webtoon values(:title, :author, :contents, :genre, :age)',
               {'title':title, 'author':author,'contents':contents,'genre':genre,'age':age})
con.commit()
con.close()

'Data Anaylsis > python basic' 카테고리의 다른 글

데이터베이스 기초  (0) 2020.01.21
rss 크롤링  (0) 2020.01.21
정규표현식  (0) 2020.01.09
클래스  (0) 2020.01.06
파이썬기초(5)  (0) 2019.12.31

a sequence of characters that define a search pattern.

 

특정한 패턴과 일치하는 문자열을 '검색', '치환', '제거'하는 등 작업에 정규식을 사용한다.

  ex) 이메일 형식 판별, 전화번호 형식 판별, 숫자로만 이루어진 문장ㄹ 등

 

* raw string: 문자열이 구성된 그대로 문자열로 변환

    - 문자열 앞에 r이 붙으면 해당 문자열이 구성된 그대로 문자열로 변환

 

자연어 처리나, 웹크롤링에 필수적은 아니지만, 사용하면 매우 편리하게 작업할 수 있다.

 

 

'Data Anaylsis > python basic' 카테고리의 다른 글

rss 크롤링  (0) 2020.01.21
웹툰 크롤링  (1) 2020.01.21
클래스  (0) 2020.01.06
파이썬기초(5)  (0) 2019.12.31
파이썬기초(4)  (0) 2019.12.30

class는 신기한 점이 참 많다.

class로 만든 객체의 갯수를 세는건 어떻게 할까?

 

쉽게 생각할수록 좋다.

class Student:
    count = 0
    
    def __init__(self, name, age):
        self.name = name
        self.age = age
        Student.count += 1
    def print_student():
        return Student.count

class 변수로 count = 0을 지정하고,

__init__ 함수(생성자) 내에서 Student.count+=1을 해주면,

객체를 생성할때 마다 Student클래스 내의 count가 1씩 증가한다.!

'Data Anaylsis > python basic' 카테고리의 다른 글

웹툰 크롤링  (1) 2020.01.21
정규표현식  (0) 2020.01.09
파이썬기초(5)  (0) 2019.12.31
파이썬기초(4)  (0) 2019.12.30
파이썬기초(3)  (0) 2019.12.26

return값으로 입력 파라메터값 역순 출력하는 reverse함수

def reverse(x,y,z):
    return z,y,x


ret = reverse(1,2,3)
print(ret)

r1,r2,r3 = reverse('a','b','c')
print(r1,r2,r3)

(3, 2, 1)

c b a

 

 

 

입력 파라메터 순서와 상관없이, 해당 파라메터=값 형태로 입력을 넣어줄 수 도 있다.

하지만, 입력 파라메터와 함수내에서 사용하는 변수명이 같아야 하므로(?)

불편하다 안쓴다.

def calc(x,y,z):
    print(x)
    print(y)
    print(z)
    return x+y+z


print(calc(y=20,x=10,z=30))

10

20

30

60

 

 

이 함수를 실행하면 오류가 나타난다.

왜일까?

이유는 함수 내에서 정의되어진 변수 result는 그 함수 내에서만 작동하고 함수가 끝나면 메모리를 잃게 되어

변수가 사라진다. 그래서 print(result)문을 실행하면 name 'result' is not defined라고 오류문을 내뱉는다.

def calculate_area(radius):
    result = 3.14 * radius **2
    return result

r = float(input('원의 반지름: '))
area = calculate_area(r)
print(result)

지역변수, 전역변수 개념을 확고히 하자.

r은 지역변수로서, 함수 내에 r을 활용하여도 전역변수 r에 할당된 값이 작용한다.

def calculate_area():
    result = 3.14*r**2
    return result

r = float(input('원의 반지름: '))
area = calculate_area()
print(area)

 

 

para_func 함수는 3개의 파라미터를 입력받는다. 여기서 주목할 것이,

v3 = 0으로 인해 v3의 default값이 0으로 주어진다.

따라서, para_func(10,20)으로 입력해도 오류가 나지 않는다. why?

para_func(10,20)은 para_func(10,20,0)으로 작동하기 때문이다.

para_func(10,20,30)을 해주면 v3=0의 default값에 v3 = 30이 들어간다.

def para_func(v1,v2,v3=0):
    result = 0
    result = v1 + v2 + v3
    return result


##전역 변수 선언 부분 ##
hap = 0

##메인 코드 부분 ##
hap = para_func(10,20)
print(hap)
hap = para_func(10,20,30)
print(hap)

*para를 활용하면, 파라미터 값 갯수 제한이 없어진다. 1개만 넣어도 되고, 2개, 3개 , etc... 

넣는 만큼 파라미터로써 작용할 수 있도록 *를 붙여준다.

여기서 주목할 것이, *para에서 para는 튜플 형태로 들어가게된다.예를들어, 

para_func(10,20)을 하게 되면 para = (10,20) tuple형식이 된다.

def para_func(*para):
    result = 0
    for num in para:
        result += num
    print(type(para))
    return result


##전역 변수 선언 부분 ##
hap = 0

##메인 코드 부분 ##
hap = para_func(10,20)
print(hap)
hap = para_func(10,20,30)
print(hap)

for 문은 in 뒤의 값을 iterating하는 반복문이다.

in 뒤에는 다양한 자료형이 올 수 있고, 다음과 같이 string을 넣어주면, string을 값 하나하나씩

뽑아서 보여준다. string 자체를 넣어도 되고, string이 할당된 변수를 입력해주어도 상관없다.

for x in 'hello python':
    print(x)
    
aStr = 'hello python'
for ch in aStr:
    print(ch)

for 문에서 가장 많이 사용하는 것이 range함수이다.

range(start,end,step)순으로 입력하면 되며, start, step은 각각 0,1의 default값을 갖는다.

예를들어, range(0,10,1) = range(0,10) = range(10)이다.

for i in list(range(0,11)):
    print(i)
for i in range(0,11):
    print(i)

'Data Anaylsis > python basic' 카테고리의 다른 글

정규표현식  (0) 2020.01.09
클래스  (0) 2020.01.06
파이썬기초(4)  (0) 2019.12.30
파이썬기초(3)  (0) 2019.12.26
파이썬기초(2)  (0) 2019.12.26

x in a 어떤 자료 x가 리스트 a 안에 있는지 확인합니다.

import random

numbers = []
for num in range(0,10):
    numbers.append(random.randrange(0,10))
    
print('생성된 리스트',numbers)
for num in range(0,10):
    if num not in numbers:
        print('숫자 {}는(은) 리스트에 없네요.'.format(num))

생성된 리스트 [4, 0, 3, 3, 5, 8, 9, 5, 5, 3]

숫자 1는(은) 리스트에 없네요.

숫자 2는(은) 리스트에 없네요.

숫자 6는(은) 리스트에 없네요.

숫자 7는(은) 리스트에 없네요.

 

 

 

 

sort함수와 sorted함수의 차이점은?

sort는 리스트에 적용을 시키면 그 리스트 자체가 바뀌고,

sorted는 리스트에 적용시켜도 따로 할당을 시키지 않으면 적용되지 않는다.

 

 

time 함수는, 현재 시간을 기록시켜주는 함수이다.

 

import time
n1 = input('Press Enter and wait for 20 seconds.')
start = time.time()
n2 = input('Press Enter and wait for 20 seconds')
end = time.time()
real_time = end - start

if real_time>20:
    print(real_time-20)
else:
    print(20-real_time)

Press Enter and wait for 20 seconds. Enter

Press Enter and wait for 20 seconds Enter

 

10.602973222732544

 

 

random.randint를 사용하여 문제의 index번호를 활용하였다.

import random
import time
test = ['snake','frog','fox','cat','dog']
num = 1
start = time.time()
while test:
    print('*문제{}'.format(num))
    
    question = random.randint(0,len(test)-1)
    
    print('{}'.format(test[question]))
    while True:
        answer = input()
        if test[question] == answer:
            print('통과!')
            num +=1
            del test[question]
            break
            
        else:
            print('다시푸세요.')
            print('{}'.format(test[question]))
            continue
end = time.time()
print('걸린시간 %1.1f'%(abs(start-end)))
    

*문제1

cat

c

다시푸세요.

cat

cat

통과!

*문제2

frog

frog

통과!

*문제3

dog

dog

통과!

*문제4

fox

fox

통과!

*문제5

snake

snake

통과!

걸린시간 6.7

 

 

random.choice를 활용하였고, 해당 값을 통과하면 list자료형 내에 존재하는 remove함수를 활용하여

통과한 문제를 제거한다.

import random
import time
test = ['snake','frog','fox','cat','dog','mouse','sheep','deer']
num = 1
num2 = 1
start = time.time()
while test:
    num +=1
    print('*문제',num)
    question = random.choice(test)
    print(question)
    
    while True:
        num2+=1
        answer = input()
        if question == answer:
            print('통과!')
            test.remove(question)
            
            break
        else:
            print('다시푸세요.')
            print(question)
            
            continue
end = time.time()
print('걸린시간 %1.1f'%(abs(start-end)))
print('정답률:',num/num2*100,'%')
    

*문제 2

dog

다시푸세요.

dog

dog

통과!

*문제 3

sheep

sheep

통과!

*문제 4

frog

frog

통과!

*문제 5

mouse

mouse

통과!

*문제 6

fox

fox

통과!

*문제 7

cat

cat

통과!

*문제 8

snake

snake

통과!

*문제 9

deer

deer

통과!

걸린시간 13.6

정답률: 90.0 %

'Data Anaylsis > python basic' 카테고리의 다른 글

클래스  (0) 2020.01.06
파이썬기초(5)  (0) 2019.12.31
파이썬기초(3)  (0) 2019.12.26
파이썬기초(2)  (0) 2019.12.26
파이썬 기초(1)  (1) 2019.12.26

+ Recent posts