728x90

=>
: 이 화살표는 스칼라의 함수 리터럴이다.
예제에서 사용한 함수 리터럴은 파일의 각 줄을 문자열 형태로 받아 이 줄에 해당 문자열 여부에 따라 True/False 값을 반환하는 익명함수를 정의했다.

함수 리터럴로 정의한 익명 함수는 굵은 화살표의 좌변을 우변으로 변환해 반환한다.
이 예제에서는 좌변의 String(줄) 을 Boolean(contains 함수의 결과)으로 변환한 후 함수 결과로 반환했다.


filter
: licLines 컬렉션의 각 요소 (파일의 각 줄) 을 굵은 화살표로 정의한 익명 함수에 전달하고, 익명 함수가 True로 판별한 요소만으로 구성된 새로운 컬랙션(ddLines) 을 반환한다.

named fuction을 정의해 할 수도 있음.


- 플레이스 홀더

위의 예제 코드에서 사용된 플레이스홀더 문법은
' 이 함수가 호출될 때 인자로 전달된 객체가 무엇이든
이 객체의 toString을 호출한 후 reverse를 호출하라 ' 는 의미.

플레이스홀더라고 하는 이유는 함수 호출과 전달되는 인수가 차지할 자리를 미리 선점하기 때문이다.



- mkString

mkString 은 배열의 모든 요소를 문자열 하나로 병합한다.
메서드에 전달한 인수는 문자열의 구분자로 사용한다.





--> 복습

ids RDD의 요소를 String 에서 Int 로 변환한 것!




'Language > Scala' 카테고리의 다른 글

Scala (1)  (0) 2022.07.10
728x90

- 객체지향 프로그래밍 언어 + 함수형 프로그래밍 요소가 결합된 언어이다. 

 

 

- 기존 Java 의 복잡성을 극복하기위해 개발된 언어이다.

  때문에 간결한 소스코드를 사용하여 Java에서 구현할 수 있는 기능을 구현 할 수 있다.

 

 

-JVM 언어로, 기존의 JAVA 라이브러리를 그대로 사용할 수 있다.

  (서버 애플리케이션이나 자바와 비슷한 다른 프로그램을 쓰는 모든 사람들에게 추천)

 

 

 

Why Scala?

1. 의도하지않은 이슈들로부터 애플리케이션을 안정화시킬 수 있다. 

변하지않는 데이터 구조, 영향받지않는 환경의 문법들로부터 코드가 더 안전해지고, 견고해지며 더 이해하기 쉬워진다. 

 

 

2. 코드가 더 간결해지고 표현력있어 질 것.

 

파이썬이나 자바스크립트같은 언어를 써 왔다면,

이미 짧고 간결한 문법에 익숙하고 한 줄에 맵, 필터, 리듀스같은 오퍼레이션을 쓰는데 익숙할 것이다.

하지만 스칼라를 사용함으로써 좀 더 복잡해지는 대신, 안정성과 퍼포먼스를 높일 수 있을 것이다. 

 

자바, C 같은 정적인 언어에 더 친숙하다면, 다른 컴파일언어에서 볼 수 없는 명시적인 타입, 코드를 제거할 수 있을 것이다. 

 

 

 

 

 

 기본 구조 및 HelloWorld

object HelloWorld {
 def main(args: Array[String]) {
   println("Hello, world!")  
   }
 }

-Scala의 main 함수는 static이 아니다. 정적 멤버 개념이 존재하지 않는다. (함수, 필드 모두)

 

- 주석은 자바와 같다.

    // 한 줄 주석

   /* 여러 줄 주석 */

 

 

 

자료형

Byte   	8 bit . Range from -128 to 127
Short	16 bit . Range -32768 to 32767
Int	        32 bit . Range -2147483648 to 2147483647
Long  	64 bit
Float	 32 bit IEEE 754 single-precision float
Double	 64 bit IEEE 754 double-precision float
Char	 16 bit unsigned Unicode character
String	A sequence of Chars
Boolean	Either the literal true or the literal false
Unit    Corresponds to no value
Null	  ull or empty reference
Nothing	 The subtype of every other type;
Any	     The supertype of any type; 
AnyRef	  The supertype of any reference type

자바에서의 자료형은

기본 자료형(int, short, long, float, double, byte, char, boolean) 과

참조 자료형(기본 자료형의 조합으로 생성한 클래스)으로 나뉜다.

이는 성능에는 도움이 될 지 몰라도 기본 자료형과 참조 자료형 간의 변환 문제로 언어의 표현이 복잡해지는 경향이 있다.

 

이에 반해 스칼라에서는 스몰토크 루비와 같이 모든 자료형을 객체로 취급하고 있다.

그 예로 3 + 4 와 같은 수식은

정수 3의 메소드 +를 4라는 정수 인자값으로 호출한다고 표현하여 (3).+(4) 와 같이 표현할 수 있다.

 

스칼라의 모든 객체는 scala 패키지의 Any를 최상위 클래스로 값(AnyVal)과 레퍼런스(AnyRef)를 모두 아우르고 있다.

 

 

 

ex.

Quick Sort 프로그램

def qsort(arr: Array[Int]): Array[Int] = {
  def swap(i: Int, j: Int): Unit = {
    val tmp = arr(i)
    arr(i) = arr(j)
    arr(j) = tmp
  }

  def partition(left: Int, right: Int): Unit =
    if (right <= left ) ()
    else {
      val pivot = arr((left + right) / 2)
      var i = left
      var j = right

      while (i <= j) {
        while (arr(i) < pivot) i += 1
        while (arr(j) > pivot) j -= 1

        if (i <= j) {
          swap(i, j)

          i += 1
          j -= 1
        }
      }

    if (left < j) partition(left, j)
    if (j < right) partition(i, right)
  }

  partition(0, arr.length - 1)
  arr
}

 

 

 

 

'Language > Scala' 카테고리의 다른 글

scala (2) 함수/플레이스홀더/mkString  (0) 2022.08.21
728x90

1. 상위 10개 기업 + 하위 10개 기업으로 변동됨. ->각자 5개씩 기업을 맡아서 조사하기로 함.
2. 조사 리스트.
->은행 이자율(예금 이자율)과 기업 배당수익률 비교
->기업 재무제표 크롤링해서 배당 기준일 전후에 따른 기업 영업이익 상승률 파악
->미국 기준 금리와 기업 주가 상승률 상관관계 파악

3. 시각화 tool을 tableau 사용하여 리포트 작성 (공부해야 함 ㅜㅜ 화이팅 합시당)
4. 추후 각 기업 자료 조사한 것을 모아서 산업군으로 분류할 예정.

 

 

 

 

import datetime
import pandas as pd
import pandas_datareader as web
import matplotlib.pyplot as plt

start = datetime.datetime(2020,2,28)
end = datetime.datetime(2020,4,30)

df = web.DataReader('008110.KS', 'yahoo', start,end)
df

data = pd.DataFrame(df)
data.head()

data.to_csv('/Users/youjin/Desktop/jusik_prj/stock_daedong.csv', encoding='cp949')

#  데이터 시각화

dd = pd.read_csv('stock_daedong.csv')
hh = pd.read_csv('stock_hanyang.csv')

 

 

 

 

 

 

 

 

 

'Language > python' 카테고리의 다른 글

파이썬/장고) 맥 파이썬 가상환경 띄우기.  (0) 2021.05.17
Django 모델 필드  (0) 2021.04.15
1.  (0) 2021.04.06
데이터 관리  (0) 2021.04.04
Django 테이블 만들기 - 반영 - 확인  (0) 2021.04.03
728x90

 

 

 

 

'Language > python' 카테고리의 다른 글

분석  (0) 2021.06.19
Django 모델 필드  (0) 2021.04.15
1.  (0) 2021.04.06
데이터 관리  (0) 2021.04.04
Django 테이블 만들기 - 반영 - 확인  (0) 2021.04.03
728x90

장고의 모델

장고의 모델(db)에는 다양한 필드가 존재한다

AutoField

ID(pk)로 사용 가능한 자동으로 증가하는 IntegerField다. 직접 사용할 필요는 없다. 모델의 기본키 필드는 별도로 지정하지 않으면 자동으로 추가됨.

BigAutoField

AutoField와 매우 유사한 64비트 정수다.

BigIntergerField

IntegerField와 매우 유사한 64비트 정수다. 

BinaryField

raw binary 데이터를 저장하기 위한 필드이다. 바이트 할당만을 지원한다. 이 필드는 기능이 제한적이다. Binary값에 쿼리셋을 필터링할 수 없다. ModelForm에 BinaryField를 포함시킬 수 없다.

BooleanField

논리 필드이다. true, false필드이고, 기본 폼 위젯은 CheckboxInput 이다. null 값 허용이 필요하면 NullBooleanField를 사용하자. Field.default가 정의되지 않았을 때, BooleanField의 기본 값은 None 이다. default None을 사용하고 해당 필드에 값을 넣지 않을 경우, migrate 시 에러가 발생하지 않고 실제 모델이 저장될때 DBMS에서 제약조건 에러가 난다.

CharField

작은 문자열에서 큰 사이즈의 문자열을 위한 필드이다. 많은 양의 경우 TextField를 사용한다. 기본 위젯은 TextInput이고, CharField는 필수 인수가 추가로 하나 있다.
CharField.max_length : 필드의 최대길이 (문자 수)이다. 

DateField

파이썬의 datetime.date 인스턴스에 의해 표현되는 날짜다. 

DateField.auto_now : 모델이 저장될 때 마다 매번 자동으로 필드를 현재시간이 설정한다. 항상 현재 날짜가 사용됨에 주의하자. 기본값을 재정의 할 수 없다. Model.save()가 호출 될 때 마다 작동되며 자동으로 수정된다. QuerySet.update() 같은 다른 방법으로 필드를 수정하면 해당 필드는 수정되지 않는다.

DateField.auto_now_add : 모델이 처음 생성될 때 자동으로 현재시간이 설정된다. 생성의 타임스탬프로 유용하다. 항상 현재 날짜가 사용된다. 기본값을 재정의 할 수 없다. 그러므로 객체가 생성될때 이 필드에 값을 설정하더라고 무시함. 이 필드를 수정하고 싶다면 auto_now_add=True 대신에 다음과 같이 설정한다.

쉽게말해, auto_now는 저장될때마다 매번 자동으로 필드를 현재시간으로 설정되고,
auto_now_add는 db가 처음 생성될 때 딱 한번 자동으로 현재시간이 설정된다.

 

default = today (datetime.date.today()의 값이 사용됨)
default = timezone.now (django,utils.timezone.now()의 값이 사용됨)

 

이 필드의 기본 위젯은 TextInput이다. 어드민에는 자바 스크립트 캘린더와 "Today" 숏컷을 추가한다. 추가로 invaild_date 오류 메세지 키를 포함한다.

auto_now_add, auto_now,default는 같이 쓸 수 없다. 이러한 옵션들을 섞어 쓴다면 오류가 발생한다.

필드에 auto_now 또는 auto_now_add를 True로 설정하면 editable=False와 blank=True이 설정된다.

auto_now 와 auto_now_add 옵션은 생성 또는 수정하는 순간의 기본 타임존 날짜가 항상 사용된다. 다른 것을 원한다면 auto_now_add, auto_now 대신에 default로 callable 를 사용하거나 save() 메소드를 재정의하자. 또는 DateField 대신에 DateTimeField를 사용하고 표시 시간을 datetime에서 date로의 변환등의 방법을 결정해라.

 

DateTimeField

파이썬에서 datetime.datetime 인스턴스로 표현되는 날짜와 시간이다. DateField와 동일한 추가 인수를 가지고 있다. 기본 위젯은 두개의 TextInput 이다.

 

DecimalField

고정 소수로 파이썬에서 Decimal 인스턴스로 나타낸다. 두개의 필수 인수가 존재한다. 

DecimalField.max_digits : 숫자에 허용되는 최대 자릿수다. 이 숫자는 decimal_places보다 크거나 같아야 한다.

DecimalField.decimal_places : 숫자와 함께 저장될 소수 자릿수다. 

999.22 ex ) models.DecimalField(...., 5max_digits= , decimal_places=2)

DurationField

시간주기를 위한 필드이다. 파이썬에서 timedelta로 모델링한다. PostgreSQL에서는 데이터 타입이 interval이고 오라클에서는 INTERVAL DAY(9) TO SECOND(6)이다. 다른 DBMS에서는 마이크로초의 bigint가 사용된다. DurationField의 산술 연산은 대부분의 경우에 잘 작동된다. 하지만 PostgreSQL을 제외한 모든 데이터베이스에서 DurationField의 값을 DateTimeField 산술 인스턴스에 비교하는 것은 기대한 것 처럼 동작하지 않는다.

EmailField

유효한 이메일 주소인지 체크하는 CharField이다. 입력값을 검증하는데 EmailValidator를 사용한다.

FileField

파일 업로드 필드이다. primary_key를 지원하지 않고 사용할 경우 에러가 난다.

FileField.upload_to : 이 속성은 업로드 디렉터리와 파일 이름을 설정하는 방법을 제공하고 두가지 방법을 사용 할 수 있다. 두 경우 모두 Storage.save() 메소드가 호출 된다.

문자열 값을 지정하면 strftime() 형식을 포함 할 수 있다. 주어진 디렉터리에 포맷 형식을 업로드 일시로 변경 후 파일이 업로드 된다.

class MyModel (models.Model): upload = models.FileField(upload_to='uploads/') uoload = models.FileField(upload_to='uploads/%Y/%m/%d/')

기본 FileSystemStorage를 사용하면, 업로드된 파일이 저장될 로컬 파일 시스템에 위치가 MEDIA_ROOT 경로에 추가된다.

또한 upload_to 는 함수 같은 callable일 수 있다. 파일 이름을 포함하여 업로드 경로를 얻기 위해 불려진다. callable은 두 인수를 수용하고 스토리지 시스템으로 전달되는 Unix 스타일 경로 (슬래쉬를 포함)를 리턴해야 한다. 두 인수는 다음과 같다.

instance : FileField가 정의된 모델의 인스턴스, 현재 파일이 첨부되는 특별한 인스턴스다.
filename : 원본 파일에 주어진 이름. 최종 목적 경로를 결정할때 사용될 수 있고 아닐수도 있다.

파일과 관련된 필드는 여러 종류가 있다. 잘 정리된 블로그를 참고하자.
https://brunch.co.kr/@ddangdol/4

FloatField

파이썬에서 float 인스턴스로 표현된 부동 소숫점 숫자이다. 이 필드의 기본 폼 위젯은 localize가 False일때 NumberInput이고 그 외는 TextInput이다. 

  • FloatField vs DecimalField
    FloatField 클래스는 때로는 DecimalField 클래스와 섞여 쓰인다. 비록 둘 모두 실수를 뜻하지만 다르게 숫자를 표현한다. FloatField는 내부적으로 파이썬의 float 타입을 사용하지만 DecimalField는 파이썬의 Decimal 타입을 사용한다. 두 필드의 비교에 대한 추가 정보는 파이썬의 decimal 모듈 문서를 참고하자.

ImageField

FileField로 모든 속성과 메소드를 상속받지만, 업로드된 객체가 유효한 이미지인지 검증한다. ImageField는 FileField에 사용 가능한 특별한 속성들 외 추가적으로 height와 width 속성이 있다. ImageField는 이러한 속성의 쿼리를 유용하게 하기 위해 두가지 선택적인 추가 인수를 가지고 있다. 

ImageField.height_field : 모델 인스턴스가 저장될 때 이미지의 높이가 자동으로 채워지는 모델 필드의 이름이다.

ImageField.width_field : 모델 인스턴스가 저장될 때 이미지의 너비가 자동으로 채워지는 모델 필드의 이름이다.

Pillow 라이브러리를 요구한다. ImageField 인스턴스는 데이터베이스에 기본 최대길이가 100자인 varchar 칼럼으로 생성된다. 다른 필드와 마찬가지로 최대 길이를 max_length 인수를 사용하여 변경할 수 있다.

IntegerField

정수다. 이 필드의 기본 폼 위젯은 localize가 False일 때 NumberInput이고 그 외에는 TextInput이다.

GenericlPAddressField

문자열 형식에 IPv4 나 IPv6 주소이다. 이 필드의 기본 폼 위젯은 TextInput 이다. 모든 문자는 소문자로 변환된다. 

GenericIPAddressField.protocol : 지정된 프로토콜을 위해 입력을 검증하여 제한한다. 허용되는 값은 'both'(기본 값), 'IPv4', 'IPv6'이다. 대소문자를 구분하지 않는다.

GenericIPAddressField.unpack_ipv4 : ::ffff:192.0.2.1과 같이 IPv4 매핑된 주소의 압축을 푼다. 이 옵션이 허용되면 앞 주소가 압축해제되어 192.0.2.1이 된다. 기본값은 사용 불가하다. 오직 protocol이 'both'로 사용 될 때만 사용 가능하다. 빈 값을 허용한다면 빈 값이 null로 저장되므로 null을 허용해야 한다.

NullBooleanField

BooleanField와 유사하지만, 옵션 중 하나로 NULL을 허용한다. BooleanField에 null=True 대신에 사용한다. 이필드의 기본 폼 위젯은 NullBooleanSelect다.

PositiveIntegerField

IntegerField와 비슷하지만 0 또는 양수이어야 한다. 

PositiveSmallIntegerField

PositiveIntegerField와 유사하지만, 오직 특정지점 이하만을 허용한다. 

SlugField

Slug는 신문에서 사용되는 용어이다. 슬러그는 오직 문자, 숫자, 밑줄, 하이픈만을 포함하는 짧은 레이블이다. 일반적으로 URL에 사용된다.

CharField와 마찬가지로, max_length를 지정할 수 있다. max_length가 지정되지 않으면 장고는 기본값으로 50자를 사용한다. 암묵적으로 Field.db_index 를 True로 설정한다. 다른 값들로 SlugField를 자동으로 미리 채우는 것이 유용하다. prepopulated_field를 사용하여 관리자에서 자동으로 이 작업을 할 수 있다.

SlugField.allow_unicode : 값이 True 라면, 필드는 ASCII 문자 외에 Unicode 문자를 허용한다. 기본값은 False 이다.

SmallIntegerField

IntegerField와 유사하지만, 오직 특정 지점 이하만을 허용한다.

TextField

큰 텍스트 필드이다. 이 필드의 기본 폼 위젯은 Textarea 이다. max_length 속성이 지정되면, 자동으로 생성된 폼 필드의 Textarea 위젯에서 반영된다. 하지만 모델이나 데이터베이스 레벨에서 강제 적용되지는 않다. 저런 경우는 CharField를 사용하자.

TimeField

파이썬에서 datetime.time 인스턴스로 나타내는 시간이다. DateField와 동일한 자동 채우기 옵션을 허용한다. 이 필드의 기본 폼 위젯은 TextInput이다. 

URLField

URL을 위한 CharField이다. 이 필드의 기본 폼 위젯은 TextInput 이다. 모든 CharField의 서브클래스와 마찬가지로, URLField는 선택적 인수인 max_length 를 가지고 있다. max_length를 지정하지 않는다면, 기본 값인 200자가 사용된다.

UUIDField

universally unique identifiers를 저장하기 위한 필드다. 파이썬에서는 UUID 클래스를 사용한다. PostgreSQL을 사용하면 uuid 데이터 타입으로 저장되고 이외에는 char(32)로 저장된다.

출처 : https://brunch.co.kr/@ddangdol/4

'Language > python' 카테고리의 다른 글

분석  (0) 2021.06.19
파이썬/장고) 맥 파이썬 가상환경 띄우기.  (0) 2021.05.17
1.  (0) 2021.04.06
데이터 관리  (0) 2021.04.04
Django 테이블 만들기 - 반영 - 확인  (0) 2021.04.03
728x90

장고는 admin 관리자 페이지, 관리할 수있는 DB까지 같이 만들어줌. 

 

 

폴더에 가상환경 생성 후 활성화 해주고,

장고 설치. 그리고 장고 어드민 스타트프로젝트 이름website.

cd website,

애플리케이션 생성. python manage.py startapp 이름(blog)

 

 

1. 어플리케이션 등록

장고에게 이런 앱 있다고 말해ㅇ줘야 함

앱 디렉 말고 프로젝트 디렉에 가서

 

settings.py 밑 쪽에 있는 Installed app~ 에

이 class 추가해주기.

 

.(접근자) 사용해 넣어주기 (맨 마지막은 클래스 이름! 알지?)

 

109번 라인 타임존도 Asia/Seoul 로 바꿔주기!!

 

 

2. 장고에게 접근하는 방법 알려주기.

브라우저에서 인터넷에 쳤을 때 접근할 수 있는 방법 알려주기. 프로젝트 폴터에 있는 urls.py 가서,

url 필요한 모듈 import. 

 

7번째 줄 마지막 static 소문자!

 

만약 기본주소 (http://localhost:9000/) 로 들어오면 , 

10번째 줄: path가 아무것도 없는 기본 주소로 들어오기 때문에 url 블로그로 넘겨줘라. 그럼, 주소가

http://localhost:9000/blog 로 바뀜. 

then, 9번째 줄 에 있는 블로그 앱으로 경로 지정. -> 설정한 블로그 앱에 따라 처리가 될 것임.

 

12 : 정적파일 (자바스크립트나,CSS,이미지 파일) 을 처리할 수 있도록 설정.

(blog에 url.py 만들고 9번째 줄 파일 설정해주기! 여기서 처리한 페이지 규칙에 따라 홈페이지 바뀔 것임.)

 

3. DB 생성

데이터 베이스 만들 때는 먼저 데이터베이스 모델 구조에 변화가 있는지 체크. 

python manage.py makemigration 

                              migrate

 

 

OK 뜨면 그 후 , 장고 개발 서버 실행 가능! 

(debug = True.)

 

저 주소로 따라가보면 에러가 뜸. 왜냐? blog폴더의 urls 파일의 urlpatterns 에 우리가 아무것도 설정이 안되어있기 때문이다. 

index.html 로 사용자 화면에 보여준다! (9) - 일단 빈 값 .

 

html 페이지 작성. blog에 템플릿이라는 폴더 만들어주고, index.html 페이지 만들어주기

doc + 탭 치면 나옴. title, body 부분 작성해주기.

 

<script> alert 쓰면 알림 뜬다. 보통 스크립트 파일은 따로 저장함. 그래서 폴더 따로 만들어주고, js 파일 만들어주기.

 

 

만든 후에 설정 가서 경로 잡아줘야 함!

 

* static 파일을 참조해 올 경로 설정

각 앱별로 static파일을 정의해놓았을 경우, STATICFILES_DIR 대신

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

를 설정하고,

python manage.py collectstatic 명령어를 주어 /static/폴더내로 복사해주면 적용됨.

 

 

 

 

 

 

colorlib.com/wp/bootstrap-search-bar/.  디자인은 여기서 받아옴!

 

 

 

다운받은 폴더는 이렇게 추가해주기. 

애플리케이션 폴더 안에 넣어줘야 한다. 

 

 

 

 

3번째 줄 처럼 경로 잡아주고,

12,13 번째 href = 뒤로 "{% ~ 넣어주면 완성 !

 

{% static ~ : 장고의 명령어. load static 먼저 선언한 후에 12,13줄 처럼 url 앞 {% 잡아줘야 함.

 

728x90

장고 shell 모드 실행

 

파이썬 쉘과 똑같음.

 

 

데이터 넣어주기.

중간은 오타,, ㅎ

다 쓰고 qs.save()

누르면 상세정보 확인 가능.

 

 

 

 

레코드 읽기

 

두개 이상의 데이터 가져올 때는 QuerySet. 하나의 데이터 타입만 가져올 때는 get 함수 이용. 조건 달아서

여기서 반환된 값이

바로 코드에서 모델에 데이터 입력 할 때 밑에 str 메소드 명시해줘야 한다고 했는데 여기서 name 반환된 것임.

 

 

 

 

 

레코드 업데이트 시 그냥

qs=Students.objects.get(s_name='parkjun')

qs.s_age=20

 해 주면 됨! (update)

 

삭제. qs지정해주고, qs.delete()

728x90

model 클래스 코딩

 

클래스를 만듬으로써 데이터베이스에 테이블을 만들어 놓은것임. 

이 클래스는 모델즈 클래스 상속받고,

필드이름 정의. 속성 ㄷ=정할 때는 데이터 타입 명시해주고, 길이까지 명시

클래스 만든 다음에

str 메소드 넣어줘야 외부에서 접근 시 테이블 이름 반환 해줘서 어떤 테이블인지 쉽게 알 수 있다.

 

 

 

 

admin 파일 열어서  클래스 등록하는 과정 거치기.

 

 

 

잘 적용됐나 확인 위해 

변경사항 있는지 검색

 

반영해주기!

 

 

 

students 생성 확인 가능.

 

 

728x90

나도코딩님의 수업을 듣고 따로 정리한 것입니다. 

 

 

 

시가총액 200위를 네이버에서 검색 후 csv 파일에 넣고 저장하는 작업입니다. 

 

먼저 코드!

import csv
import requests
from bs4 import BeautifulSoup


url = "https://finance.naver.com/sise/sise_market_sum.nhn?&page=1"

filename = "시가총액1-200.csv"
f = open(filename, "w", encoding="utf-8-sig", newline="")  # newline : 공백으로 하면 자동 줄바꿈됨.
writer = csv.writer(f)


title = "N	종목명	현재가	전일비	등락률	액면가	시가총액	상장주식수	외국인비율	거래량	PER	ROE".split("\t")
# ["N", "종목명", "현재가"]

print(type(title))
writer.writerow(title)

for page in range(1,5):
    res = requests.get(url + str(page))  #url 정보, 페이지 숫자 넣어주기
    res.raise_for_status()
    soup = BeautifulSoup(res.text, "lxml")

    data_rows=soup.find("table", attrs={"class":"type_2"}).find("tbody").find_all("tr")
    for row in data_rows:
        colums = row.find_all("td")
        if len(colums) <= 1:   # 의미없는 데이터는 skip
            continue
        data = [column.get_text() for column in colums]
        # print(data)
        writer.writerow(data)

 

 

만약 open 줄에서 encoding 을 ="utf8" 로 했다면 엑셀로 csv 파일을 보았을 때 한글이 깨져서 나온다. 

이것의 해결방법은 utf-8-sig 을 넣어주는 것.

 

 

저장 후 실행을 누르면 vscode 옆 파일 칸에 내가 설정한 이름 (filename) 으로 생성된 것을 확인할 수 있다. 

 

직접 폴더로 들어가서 엑셀 파일로 실행해보면 

 

 

 

 

확인 가능 !!

728x90

(나도코닝님의 강의를 듣고 따로 실습 해본 것 입니다.)

웹툰은 네이버 웹툰 중에서 내가 좋아하는 '아홉수 우리들 ' 선택!

 

 

웹툰 페이지에 가서 관리자 모드 전환 뒤 elements 들을 복사해왔다.

 

 

requests : 웹에서 원하는 정보를 추출할 때 웹페이지의 문서정보 (웹페이지의 정보)를 가져올 수 있게 하는 라이브러리

lxml : 구문 분석하는 파서.

 

9번째 줄) soup 문법으로 모든 문서를 가 가져오고, 'td' 로 시작하는 것 중에 class 가 title 인 것을 변수에 넣었음.

 

 

 

 

여러 줄 출력 결과

 

속성은 대괄호!

 

 

 

결과

가장 최신 화부터 1페이지에 있는 회차 정보, 회차 제목을 모두 크롤링 해왔다. 

 

 

 

 

 

2. 평점 구하기

 

 

보기 좋게 전체와 평균까지 넣어주고

 

 

+ Recent posts