python으로 데이터 수집하기 - 1) pycharm 설치 및 관련 패키지 설치하기




python으로 데이터 수집하기



pycharm 설치 및 패키지 설치하기 



request, beautifulSoup4를 사용해서 웹페이지 크롤링을 해보려고 합니다. 

pyCharm을 쓰고 있으면  IDE에서 간단하게 해당 패키지들을 설치할 수 있습니다.  

먼저 pyCharm 프로그램을 실행하고 File-Settings을 클릭합니다. 








Settings - Project에서 에서 Project Interpreter를 클릭하면

오른편에 +, - , ▲ 아이콘이 있습니다. 


+ : 패키지 추가

- : 패키지 삭제

▲ : 패키지 업데이트



+ 버튼을 눌러서 데이터 수집할때 사용할

 beautifulsoup4, request 패키지를 설치해봅니다. 


패키지 이름으로 검색하고 찾으면 클릭해서 Install Package 버튼을 누르면 끝입니다. 




request 패키지도 추가합니다. 



그럼 다음 포스팅에서는 실제로 웹페이지를 수집하는 

스크립트를 작성해보겠습니다. 



참고: 


https://engkimbs.tistory.com/611


https://engkimbs.tistory.com/613?category=762758


https://beomi.github.io/2017/02/27/HowToMakeWebCrawler-With-Selenium/








postgresql 테이블 조인(join) 예시



1. 테이블 사이에 이름이 같은 필드가 없을 경우 


그냥 필드 이름을 나열하고 from 이후 두 개의 테이블을 나열하고 테이블 join 조건을 where에 채워주면 됨 



select name,  area, deposit_date as adate , deposit_min as aprice from table1, table2 where table1.id = table2.hid and type = '1';

postgresql 의 기본키 자동 증가





postgreSQL 사용법



기본키 자동증가 설정하기 



최근 버전


ALTER TABLE test1 ADD COLUMN id SERIAL PRIMARY KEY;



예전 버전 


1. 시퀀스를 생성한다. 



create sequence sequence_name owned by tablename.columname;



2. 기본키의 기본 값 수정



기본 키의 기본값에 nextval('sequence_name'::regclass) 를 추가한다. 


alter table test alter column id set default nextval('sequence_name');






[ postgreSQL] 다른 테이블 복사하기





PostgreSQL 사용법 


다른 테이블 구조 & 데이터 복사하기 






데이터만 복사하기 




CREATE TABLE newtable AS SELECT * FROM oldtable;





데이터 & 인덱스 &  constraint 등의 정보 다 같이 복사하기 


아래 두개의 sql 문을 차례로 실행한다. 복사 속도는 위의 방식이 더 빠르지만 인덱스 정보가 같이 복사됨.



 


create table newtable (like "oldtable" including all);

insert into newtable ( select * from "oldtable");




다른 테이블의 일부 필드만 복사하기 



insert into items_ver(item_id, item_group, name)

select * from items where item_id=2;



insert into items_ver (item_id, name, item_group)

select item_id, name, item_group from items where item_id=2;








  • 1122 2018.02.28 11:35 ADDR 수정/삭제 답글

    초대장 하나 받고싶어요 도와주세요 ramen1225@naver.com

shell script - for 문 사용 예시



쉘 스크립트에서 for문 사용 예시 




- 기본 



#!/bin/bash

for i in 1 2 3 4 5

do

   echo "Welcome $i times"

done





- 배열 사용하기 



#!/bin/bash

arrayname=(value1 value2) 


for i in ${arrayname[@]}

do

   echo "Welcome $i times"

done







- 숫자범위 사용하기 



#!/bin/bash

for i in {2000..2011};do echo " $i times";done




- 명령어 결과 사용하기 


#!/bin/bash

for entry in $stockdir/*;do echo " $entry times";done




- 일반 반복문 형식 사용하기


#!/bin/bash

for (( i=0; i<100; i++ ));do echo " $i times";done



#!/bin/bash

for (( i=0; i<100; i=i+5 ))

  do

    j=$((i + 4));

    echo "alter table 테이블이름 add column age_"$i"_"$j"_totalcnt bigint DEFAULT NULL;";

    echo "COMMENT ON COLUMN 테이블이름.age_"$i"_"$j"_totalcnt IS '"$i" - "$j"세 총 인구수';"

done









shell script 작성법 - 수식 계산 & 문자열 조작



shell script 작성법 


수식 계산 & 문자열 조작 



수식 계산은 아래 방식중 하나를 사용해서 작성한다. 


num=$((num1 + num2))

num=$(($num1 + $num2)) 

num=$((num1 + 2 + 3))








문자열 시작에서부터 정규 표현식에 매칭되는 

문자열조각(substring)의 길이 계산하기


expr match "$string" '$substring'
$substring 은 정규 표현식입니다.

expr "$string" : '$substring'
$substring 은 정규 표현식입니다.

예시 1) 'abc[A-Z]*.2' 정규표현식에 매칭하는 문자열 길이 구하기
abc 로 시작하고 
[A-Z] A에서 Z까지 영어대문자가 0번 이상 반복되며
2로 끝남 
stringZ에서 abcABC12 에 해당되고 문자열 조각의 길이는 8임 


stringZ=abcABC123ABCabc


echo `expr match "$stringZ" 'abc[A-Z]*.2'`   # 8
echo `expr "$stringZ" : 'abc[A-Z]*.2'`       # 8

예시 2)  문자열에서 sorted 앞에 있는 문자열 길이만 계산


echo `expr match "Autech_Corporation_body.txt.sorted" '.*sorted'`

34

 echo `expr match "Autech_Corporation_body.txt" '.*sorted'`

0





참고) ttps://wiki.kldp.org/HOWTO/html/Adv-Bash-Scr-HOWTO/string-manipulation.html




postgresql 테이블에 칼럼 추가 + 커멘트 달기






postgresql 테이블에 칼럼 추가 + 커멘트 달기




칼럼 추가 방식 


ALTER TABLE 테이블명 ADD COLUMN 컬럼명 데이터타입 제약조건


참고) postgresql numeric type


 



예시 


- int 형의 칼럼 추가하고 코멘트 달기


ALTER TABLE 데이블이름 ADD 칼럼이름 integer;

COMMENT ON COLUMN 테이블이름.칼럼이름 IS '코멘트';



- varchar 칼럼 추가하면서 default 값 설정하기  


ALTER TABLE test_tb ADD COLUMN name varchar(50) DEFAULT 'NONAME'


- character varying 사이즈 120인 칼럼 추가하기 


ALTER TABLE test_tb ADD COLUMN name character varying(120)



default 값이 있는 칼럼을 추가할 경우 

postgresql 10 이하 버전에서는 테이블을 다시 생성하기 때문에 

시간도 오래 걸리고 그 동안에 access exclusive lock 에 걸리게 됩니다. 

access exclusive lock 은 lock level 중 제일 높은 레벨로 select 까지 막히게 됩니다. 

(실서비스 하는 데이터베이스에서 매우 곤란한 상황 ; - ; ) 


그럴 경우 한번에 칼럼을 추가하고 default 값을 설정하는 것보다는

아래의 예시와 같이 칼럼을 추가하고 기본 값을 설정하는 것이 좋습니다. 



ALTER TABLE test_tb ADD COLUMN name varchar(50);

update test_tb set name = 'NONAME';


ALTER TABLE items ADD COLUMN updated_at timestamptz;

UPDATE items SET updated_at = now();


 


참고

https://americanopeople.tistory.com/272

https://americanopeople.tistory.com/292?category=695027

https://www.postgresql.org/docs/10/datatype-numeric.html









네이버 뉴스 검색 API


네이버 뉴스 검색 API





네이버에서 제공하는 뉴스 검색 API 기본 정보를 저장해보았습니다. 


https://developers.naver.com/docs/search/news/


하루에 25000건 까지 사용이 가능합니다. 


















간단하게 작성했던 포스팅인데 지금도 가끔씩  검색 유입이 있어서 

예전에 뉴스 검색 crawler 작성해서  github에 올려두었던 것 추가합니다. 

php로 작성했고 json으로 받은 결과를 csv 형태로 변환해서 저장하는 예제입니다. 






https://github.com/roboreport/doc2vec-api/blob/master/data/crawler/cron_news.php

















ssh 작업 백그라운드로 돌리기



https://nosyu.pe.kr/17455



  • 현재 프로그램이 돌고 있습니다. 제가 확인한 상황은 Java 프로그램이 돌고 있는 상황입니다. 즉, Java -jar 명령어를 이용해 실험을 돌리고 있는 것입니다.
  • ‘Ctrl + z’를 눌러서 해당 프로그램을 정지(pause)시킨 후 shell로 돌아갑니다.
  • ‘bg’ 명령어를 쳐서 해당 프로그램을 background로 보내어 돌려버립니다.
  • ‘disown -h’ 명령어를 쳐서 ssh 연결이 끊어져도 해당 프로세스가 돌아가도록 합니다.
  • 이제 안전하게 ssh 연결을 종료하셔도 됩니다. (Windows 도움말 같네요.)


  • postgresql 에서 문자열 처리 방법 ( concat, split_part)



    문자열을 구분자로 나누는 경우 



    postgresql에서 문자열을 구분자로 자를 경우 split_part 함수를 사용한다. 

    사용법은 split_part('원래 문자열', '자를 문자', 위치) 로 사용한다. 


    예를들어 1998-01-04 문자열일 경우 

    split_part('1998-01-04', '-', 1)을 리턴받으면 1998이 나오게 된다. 


    필드 업데이트 예시 : 

    update 테이블이름 set year = split_part(date::TEXT, '-', 1)::SMALLINT, month=split_part(date::TEXT, '-', 2)::SMALLINT





    문자열을 합칠 경우 




    postgresql 에서 문자열 또는 필드를 붙일 경우는 concat 함수를 사용한다. 


    사용법은 간단하다. 


    concat()안에 붙이기 원하는 필드 또는 문자열을 구분자 , 을 사용하여 적어주면 된다. 

    이렇게 생성된 새로운 필드의 이름은 뒤에 적어주면 된다. ("" 은 옵션) 


    간단하게 예시를 보자. 



    SELECT employee_id,first_name,last_name,

    concat(first_name,'-',last_name) "Name of the Employee" 

    FROM employees

    WHERE department_id=100;