크롤링 하여 csv 에 저장하기

import os
import csv
import requests
from bs4 import BeautifulSoup 

os.system("clear")
alba_url = "http://www.alba.co.kr"


def alldata(datalist):
  spacelist = datalist.find_all("td",{"class":"local first"})
  titlelist = datalist.find_all("td",{"class":"title"})
  timedatalist = datalist.find_all("td",{"class":"data"})
  paylist = datalist.find_all("td",{"class":"pay"})
  regdatelist = datalist.find_all("td",{"class":"regDate last"})
  
  bigdatalist =[]
  spacedatalist = []
  titledatalist = []
  timedatadatalist = []
  paydatalist = []
  regdatedatalist = []
  for space in spacelist:
    spacedatalist.append(space.text)

  for title in titlelist:
    titledatalist.append(title.find("span").text)
  
  for timedata in timedatalist:
    timedatadatalist.append(timedata.text)  
    
  for pay in paylist:
    moneylist = pay.find_all("span")
    moneyback = ""
    for money in moneylist:
      moneyback += money.text
    paydatalist.append(moneyback)
    
  for regdate in regdatelist:
    regdatedatalist.append(regdate.text)
    
  for gogo in range(len(spacelist)):
    smalldata = []
    smalldata.append(spacedatalist[gogo].replace('\xa0', ' '))
    smalldata.append(titledatalist[gogo])
    smalldata.append(timedatadatalist[gogo])
    smalldata.append(paydatalist[gogo])
    smalldata.append(regdatedatalist[gogo])
    bigdatalist.append(smalldata)
  return bigdatalist


def workjob(work_url):
  result = requests.get(work_url)
  soup = BeautifulSoup(result.text,"html.parser")
  datalist = soup.find("div",{"class":"goodsList goodsJob"}).find("table",{"cellspacing":{"0"}}).find("tbody")  
  
  try:
    return alldata(datalist)    
  except:
    pass

def insidejob(inside_url,company):
  print(inside_url)
  result = requests.get(inside_url)
  soup = BeautifulSoup(result.text,"html.parser")
  listcount = int(soup.find("div",{"id":"NormalInfo"}).find("p").find("strong").text.replace(",",""))
  bigdataforcvs = []
  if listcount % 50 == 0:
    pagecount = int(listcount/50)
  else :
    pagecount = 1+ int(listcount/50)
  for i in range(1,pagecount+1):
    try:
      pageurl = f"{inside_url}job/brand/?page={i}&pagesize=50&areacd=&workaddr1=&workaddr2=&jobkind=&jobkindsub=&jobkindmulti=&gendercd=&agelimitcd=&agelimit=0&worktime=&weekdays=&searchterm=&paycd=&paystart=&payend=&workperiodcd=&workstartdt=&workenddt=&workchkyn=&workweekcd=&targetcd=&streetunicd=&streetstationcd=&unicd=&schnm=&schtext=&orderby=freeorder&acceptmethod=&eleccontract=&careercd=%20&lastschoolcd=&welfarecd=&careercdunrelated=&lastschoolcdunrelated=&strAreaMulti=&genderunrelated=&special=&hiretypecd=&totalCount={listcount}"
      bigdataforcvs.append(workjob(pageurl))
      print(f"크롤링 중 Page({i}/{pagecount})")
    except:
      pageurl = f"{inside_url}?page={i}&pagesize=50&areacd=&workaddr1=&workaddr2=&jobkind=&jobkindsub=&jobkindmulti=&gendercd=&agelimitcd=&agelimit=0&worktime=&weekdays=&searchterm=&paycd=&paystart=&payend=&workperiodcd=&workstartdt=&workenddt=&workchkyn=&workweekcd=&targetcd=&streetunicd=&streetstationcd=&unicd=&schnm=providercd&schtext=BP4,BP5,BP6,BP7&orderby=freeorder&acceptmethod=&eleccontract=&totalCount={listcount}&viewtype="
      bigdataforcvs.append(workjob(pageurl))
      print(f"크롤링 중 Page({i}/{pagecount})")

  
    save(bigdataforcvs,company)


    
def save(bigdataforcvs,company):
  file = open(f"day8/csv/{company}.csv", mode="w")
  writer = csv.writer(file)
  writer.writerow(["place","title","time","pay","data"])

  for pages in bigdataforcvs:
    for jobs in pages:
      writer.writerow(jobs)
  return

def startgame():
  result = requests.get(alba_url)
  soup = BeautifulSoup(result.text,"html.parser")
  inside = soup.find('div',{"id":"MainSuperBrand"}).find("ul",{"class":"goodsBox"}).find_all("a", {"class":"goodsBox-info"})
  for joburl in inside:
    company=joburl.find("span",{"class":"company"}).text
    print(company)
    insidejob(joburl["href"],company)
    print("csv 저장완료")

생각보다 코드가 길지만 숙련도가 늘으면 깔끔하게 정리되지 않을까?

이런식으로 프린트를 해주어 얼마나 다운 받고 찾았나 알 수 있다

파일들은 회사이름으로 동기화 했당

블로그 이미지

Or71nH

,

###단축키

str = "" + 문자열    두 문자열을 합쳐 넣어준다
"{0} 에서 {1}까지".format(문자열, 문자열)    문자를  대입하여 넣어준다
print("-"*13, end="") 원래 마즈막은 \n 마즈막을 바꾸어 줄바꿈이 없이 출력
print("'{0}'".format(data_str[start: end]))   출력할 부분 출력
len(data_str)   문자열 길이를 알려줌
data_str.find("찾을 문자")   문자를 찾아 시작위치를 출력한다
data_str.rfind("찾을 문자:)   문자를 찾아 끝위치를 출력한다
idx = data_str.index(input_str)   위와 같지만 에러가 발생한다
"사이사이 추가할 거 ".join(data_str)   한 문자마다 사이에 추가해준다
capiralize() lower() upper()   대소문자 만들기 함수
lstrip() rstrip() strip()   양쪽만 없에는 그런 함수
replace("찾을거", "변환할거")   찾은것을 모두 변환한다
split("찾을 문자")   입력 문자 기준으로 나누어 준다
"문자".isdigit()   숫자 문자열인 경우 true 반환

### 거꾸로 출력하기

idx = -1
while true:
	print("data_str[{0}] : {1}".format(idx, data_str[idx]))
    if idx == -cnt:
    	break
        idx -= 1

### 문자열 특정 부분 출력

data_str = "와우! 안녕하세요, 파이썬입니다."

start = input("시작 인덱스를 입력하세요: ")
end = input("종료 인덱스를 입력하세요: ")

try
	end = int(end)
except ValueError:
	end = None
    
print("'{0}'".format(data_str[start: end]))

// 숫자를 넣으면 사이값을 출력

###갯수알아내기

data_str = "Have a nice day!"

print("'{0}'".format(data_str))
input_str = input("위에서 찾고자 하는 문자열을 입력하세요: ")

print("'{0}'에서 '{1}'은 {2} 번 나타납니다.".format(data_str, input_str, data_str.count(input_str)))

### 찾고자 하는 문자열 

data_str = "파이썬은 클래스를 이용해 객체를 생성하는 갯체지향 프로그래밍 언어입니다."

print("'{0}'".format(data_str))
input_str = input("위에서 찾고자하는 문자열을 입력하세요: ")

print("str.find() ...")
idx = data_str.find(input_str)

if idx != -1:
	print("\t'{0}' : [{1}] <= 문자열을 가장 먼저 찾은 위치".format(input_str, idx))
else:
	print("\t'{0}'를 찾을 수 없습니다.".format(input_str))
    
print("str.rfind() ...")
idx = data_str.rfind(inpur_str)

if idx != -1:
	print("\t'{0}' : [{1}] <= 문자열을 가장 마즈막 찾은 위치".format(input_str, idx))
else:
	print("\t'{0}'를 찾을 수 없습니다.".format(input_str))
    
print("str.index() ...")
try:
	idx = data_str.index(input_str)
    print("\t'{0}' : [{1}] <= 문자열을 가장 먼저 찾은 위치".format(input_str, idx))
except ValueError:
	print("\t'{0}'를 찾을 수 없습니다.".format(input_str))

### join()

data_str ="가나다라마바사아자차카타파하"
comma_space = ", "

output = comma_space.join(data_str)
print("{-}: {1}".format(type(output), output))

### capiralize() lower() upper()

data_str = "better tomorrow"

data_str = data_str.capitalize()
print("'{0}'".format(data_str_))
 // 맨앞만 대문자로함

data_str = data_str.lower()

// 모든 문자 소문자로 변환

data_str = data_str.upper()

//모든 문자 소문자로 변환

###lstrip() rstrip() strip()

data_str = " 홍 길동 "
data_str = data_str.lstrip(" ")
print("'{0}' : ({1})".format(data_str, len(data_str)))

/// 왼쪽에서 다른거 나올때 까지 제거 


data_str = "___홍  길 동______  "
data_str = data_Str.rstrip("_ ")
print("'{0}' : ({1})".format(data_str, len(data_str)))

//오른쪽에서 따른거 나올때 까지 제거

data_str = " 0?홍  길동  _#     "
data_str = data_Str.strip(" 0?_#")
print("'{0}' : ({1})".format(data_str, len(data_str)))

/// 양쪽에서 다른거 나올떄까지 제거한다

### replace ()

data_str = "10....20.....30.....40.....50"

data_str =data_str.replace("."*4, "\t")
print(data_str)



data_str = "10, 20, 30, 40, 50"

data_str = data_str.replace(" ","")
print(data_str)

data_list = data_str.split(",")
for val in data_list:
	print(val)

### split()

data_str = "10, 20, 30, 40, 50"

data_str = data_str.replace(" ","")
print(data_str)

data_list = data_str.split(",")
for val in data_list:
	print(val)

 

###문자열 구성 확인 방법 isdigit():

data_str = "10, 20, 3o, 40 ,50"

data_str = data_str.replace(" ", "")
print(data_str)

data_list = data_str.split(",")
for val in data_list:
	print(val, end=" ")
    if not val.isdigit():
    	print("<= ", end="")
    print()

 

# -*- coding: utf8 -*-

data_str = " 파이썬은 클래스를 이용해 객체를 생성하는 객체지향 프로그래밍 언어입니다."

find_str = "객체"

===============(문자 하나 찾기)==================================
idx = data_str.find(find_str, 15) /// find("찾을문자" , 시작위치)

print(idx)
==========(문자 모두다 찾기)========================
idx = -1 

count = 1
while True: 
	idx = data_str.find(find_str, idx + 1 )
    if idx != -1:
    	print("[0] ~[1]".format(idx, idx + len(find_str) -1))
        new_str = data_str.replace(find_str,"****", 1)replace("문자열","변환할거",몇번할것인지)
        print(new_str)
        count += 1
    else:
    	break
        
 =======================================

'+++++SW 일일 공부+++++ > SW Expert Aademy' 카테고리의 다른 글

stack  (0) 2020.03.26
객체지향  (0) 2020.02.11
Python Dict()  (0) 2020.02.02
파이썬 set(), 집합  (0) 2020.02.02
파이썬 받은 값 문자열 정렬 영어사전만들기  (0) 2020.02.02
블로그 이미지

Or71nH

,

###set

data_set = {..., ..., ..., ...} 넣고 싶은 값  중복을 재거하여 담는다
type(data_set) <class 'set'> 데이터 타입을 출력한다
set1 & set2 intersection 과 같음 같은 값을 출력한다
set1 | set2 union 과 같음 모든 값을 하나씩 출력한다
set1 - set2 difference와 같음 중복된 값을 빼고 출력한다
data_set.add(값)   값을 추가함 중복시 추가안함
data_set.update({값,값,값})   여러개의 값을 추가함
data_set.remove(값) 제거할 값 값을 찾아 제거함
data_set.pop(위치) 제거할 위치 위치를 찾아 제거함
data_set.clear()   다제거함
값 in data_set 값이 있으면 값이 있으면 True
값 not in data_set 값이 없으면 값이 없으면 True
data_set.issuperset(셋) 셋 객체  셋 을 전부 포함하고 있는지 True
data_set.issubset(셋) 셋 객체 셋에 전부 포합되어 있는지 True
enumerate(data_set)   위치와 값을 2개 반환함
     
     

### set

data_set = {10, 20, "파이썬", "파이썬"}

print("{0} {1}".format(type(data_set), data_set))

data_set = set(range(10,21,2))
print("{0} {1}".format(type(data_set), data_set))

data_str = "Better Tommorrow"
data_set = set(data_str)
print("{0} {1}".format(type(data_set), data_set))

### 집합 

data_set1 = {1, 2, 2, 3, 4, 4, 5, 6, 7, 7, 7, 11}
data_set2 = {2, 3, 5, 9, 11, 12, 15]

print("{0} & {1} = {2}".format(data_set1, data_set2, data_set1 & data_set2))
print("{0} | {1} = {2}".format(data_set1, data_set2, data_set1 | data_set2))
print("{0} - {1} = {2}".format(data_set1, data_set2, data_set1 - data_set2))

print("{0}.intersection({1}) = {2}".format(data_set1, data_set2, data_set1.intersection(data_set2)))
print("{0}.union({1}) = {2}".format(data_set1, data_set2, data_set1.union(data_set2)))
print("{0}.difference({1}) = {2}".format(data_set1, data_set2, data_set1.difference(data_set2)))

### set 활용하기

data_set1 = {1, 2, 2, 3, 4, 4, 5, 6, 7, 7, 7, 11}0

data_set2 = {x for x in data_set1}
print("data_set2: {0} {1}".format(type(data_set2), data_set2))

data_set3 = {x for x in data_set1 if item %  2 == 1}
print("data_set3: {0} {1}".format(type(data_set3), data_set3))

data_set4 = {x for x in data_set1 if item % 2 == 0 }
print("data_set4: {0} {1}".format(type(data_set4), data_set4))

data_set5 = {x * y for x in data_set1 if x % 2 == 1
					for y in data_set1 if y %2 == 0}
print("data_set5: {0} {1}".format(type(data_set5), data_set5))

 

블로그 이미지

Or71nH

,
def inputspilt():
    inputdata = list(input().split(', '))
    return inputdata

print(sorted(inputspilt()))

위처럼 하면 알아서 정렬이 된다 

 

def inputspilt():
    inputdata = list(input().split(', '))
    return inputdata

def prettyprint(list):
    prettystr = ""
    for i in list:
        prettystr += "%s, "%i
    print(prettystr[:-2])
    return


result = sorted(inputspilt())
prettyprint(result)

그리고 출력을 이쁘게 하려면 이렇게 수정

'+++++SW 일일 공부+++++ > SW Expert Aademy' 카테고리의 다른 글

Python Dict()  (0) 2020.02.02
파이썬 set(), 집합  (0) 2020.02.02
파이썬 한글 범위 주소 숫자로 알아내기  (0) 2020.01.31
Python 튜플  (0) 2020.01.28
리스트 조작법  (0) 2020.01.24
블로그 이미지

Or71nH

,
dicBase = [[id('가'), id('깋')], [id('나'),id('닣')],[id('다'),id('딯')],[id('라'),id('맇')],[id('마'),id('밓')],[id('바'),id('빟')],[id('사'),id('싷')],[id('아'),id('잏')],[id('자'),id('짛')],[id('차'),id('칳')],[id('카'),id('킿')],[id('타'),id('팋')],[id('파'),id('핗')],[id('하'),id('힣')]]
print(dicBase)

뽑아쓰는 방법

print(dicBase[0][0])
print(dicBase[0][1])

a = id(input())
if dicBase[0][0]>=a>=dicBase[0][1]:
	print("ㄱ임")

'+++++SW 일일 공부+++++ > SW Expert Aademy' 카테고리의 다른 글

파이썬 set(), 집합  (0) 2020.02.02
파이썬 받은 값 문자열 정렬 영어사전만들기  (0) 2020.02.02
Python 튜플  (0) 2020.01.28
리스트 조작법  (0) 2020.01.24
Python 표준 모듈과 활용  (0) 2020.01.14
블로그 이미지

Or71nH

,