*구현하고자 하는 기능
-알바천국, 알바몬
-조건; 사이트/블로그 등재 (날짜순)
-특정 조건; 주2-3회, 위치, 일하는 시간 12-18시간;
-위치; 이대, 신촌, 서울대입구, 봉천동, 서강대, 대흥, 아현 일대
-11/20~
알바천국, 알바몬 각각 URL 따고 제목/url 따기; 현재 함수 이전까지 완료/
-for문 활용해서 함수로 만들고
-각 url로 들어가서 일하는 시간 뽑아내기 => 시간을 기준으로 12-18시간?
-제목/url/시간/위치 => 웹페이지 or mail로
+웹페이지 활용하면 네이버지도 api- 집에서의 거리까지 분석
*그냥 페이지 말고 모바일 페이지의 api를 따올 수는 없을까?
-12/3 기준
본문 + url을 뽑아서 txt 파일로 만들어주고, txt 파일을 읽어서 없는 내용만 따로 추가. 메일로 전송하는 기능까지 완료하였다.
생각보다 어려운 프로젝트... 이제 본문 텍스트의 정규표현식 말고 중복된 ip에 대한 필터링도 해결해야 할 문제로 남아있다.
-추후 해야할것
본문 텍스트를 분석해서 시간/날짜별로 걸러주는것도 필요할듯...
현재까지의 코드
=----------------
import requests
from bs4 import BeautifulSoup
import datetime
import re
from selenium import webdriver
from IPython.display import Image, IFrame, Javascript
title_li = []
sub_text_li = []
filepath_title = int(input("만들 파일 제목:"))
filepath_write = "./cafe_{filepath_write}.txt".format(filepath_write=filepath_title)
filepath = "./cafe_{filepath}.txt".format(filepath=int(filepath_title)-1)
#os로 파일이 없으면 만들어라
n = int(input("찾고자 하는 페이지:"))
mail_title_plus = str(input("메일제목:"))
sth_to_tell = str(input("말하고자 하는것:"))
title_li_mon = []
title_li_heaven = []
now = datetime.datetime.now()
nowdate_time = now.strftime("%m-%d %H:%M")
nowdate_day = now.strftime("%m_%d")
URL_PAGE_heaven = "http://www.alba.co.kr/job/area/MainLocal.asp?page={page_num}&pagesize=20&viewtype=L&sidocd=02&gugun=%BC%AD%B4%EB%B9%AE%B1%B8,%BC%AD%B4%EB%B9%AE%B1%B8,%B8%B6%C6%F7%B1%B8,%B8%B6%C6%F7%B1%B8,%B8%B6%C6%F7%B1%B8,&dong=%B4%EB%C8%EF%B5%BF,%20%BE%C6%C7%F6%B5%BF,%20%C3%A2%C0%FC%B5%BF&d_area=&d_areacd=&strAreaMulti=02%7C%7C%BC%AD%B4%EB%B9%AE%B1%B8%7C%7C%B4%EB%C7%F6%B5%BF%2C02%7C%7C%BC%AD%B4%EB%B9%AE%B1%B8%7C%7C%C3%A2%C3%B5%B5%BF%2C02%7C%7C%B8%B6%C6%F7%B1%B8%7C%7C%B4%EB%C8%EF%B5%BF%2C02%7C%7C%B8%B6%C6%F7%B1%B8%7C%7C%BE%C6%C7%F6%B5%BF%2C02%7C%7C%B8%B6%C6%F7%B1%B8%7C%7C%C3%A2%C0%FC%B5%BF%2C&hidJobKind=&hidJobKindMulti=06210000%2C06020000%2C06220000&WorkTime=&searchterm=&AcceptMethod=&ElecContract=&HireTypeCD=&CareerCD=&CareercdUnRelated=&LastSchoolCD=&LastSchoolcdUnRelated=&GenderCD=&GenderUnRelated=&AgeLimit=0&AgeUnRelated=&PayCD=I01&PayStart=&WelfareCD=&Special=&WorkWeekCD=&hidSortCnt=20&hidSortOrder=&hidSortDate=&WorkPeriodCD=&hidSort=FREEORDER&hidSortFilter=Y&hidListView=LIST&WsSrchKeywordWord=&hidWsearchInOut=&hidSchContainText="
URL_PAGE = "http://www.albamon.com/list/gi/mon_subway_list.asp?page={page_num}&ssf=&uppsubway1=102&uppsubway2=102&uppsubway3=102&codsubway1=10239&codsubway2=10238&codsubway3=10237&aorder=,0,1,2&sbline1=M2&sbline2=M2&sbline3=M2&mapview=&ps=20&ob=6&lvtype=1&rpcd=,1060,1070,1080&partExc=&paycd=A000&paycd_a=&rWDate=1&Empmnt_Type="
driver = webdriver.Firefox()
with open(filepath_write, "a") as fp:
fp.write("알바몬 추가 항목"+nowdate_time+"\n")
for i in range(1, n+1):
response = requests.get(URL_PAGE.format(page_num=i))
# 그래서 먼저 decode 하고 dom을 뽑아보기
r = response.content
r = r.decode('cp949')
dom = BeautifulSoup(r, "html.parser")
# selector; 목록의 본문
css_selector = "div.subWrap p.cName "
css_selector_body = "div.subWrap p.cTit "
css_selector_url = 'div.gListWrap tbody tr td div p.cName a'
# 1, 3, 5, 7 홀수로 뽑아내면 됨 (중간에 필터링 위해서)-알바천국과 달리 class네임이 있으므로 그걸 적용
# 이렇게 뽑으면 albamon.com 뒤의 주소만 나옴
for i in range(len(dom.select(css_selector))):
title_text_print = dom.select(css_selector)[i].text
title_body_text = dom.select(css_selector_body)[i].text
f = open(filepath, "r")
data = f.read()
if title_text_print in data:
pass
print("ho~")
elif title_text_print in title_li_mon:
pass
print("hey~")
else:
title_li_mon.append(title_text_print)
# 본문 중에서 url만 뽑아내기
get_herf = dom.select(css_selector_url)[i].get("href")
albamon_com = "http://www.albamon.com"
# 전체 url 구하기 (sub_url ; 해당 글의 링크)
sub_url = albamon_com + get_herf
b = i+1
fp.writelines(str(b)+"\n"+title_text_print+"\n"+title_body_text+"\n"+sub_url+"\n")
#fp.write(str(i+1)+title_text_print+sub_url+"\n")
fp.write("\n"+"알바천국 추가 항목"+nowdate_time+"\n")
for i in range(1, n+1):
response = requests.get(URL_PAGE_heaven.format(page_num=i))
# 그래서 먼저 decode 하고 dom을 뽑아보기
r = response.content
r = r.decode('cp949')
dom = BeautifulSoup(r, "html.parser")
# selector; 목록의 본문
css_selector = "table tbody tr td.title a span.company"
css_selector_body = "table tbody tr td.title a span.title"
css_selector_url = "table tbody tr td.title a "
for i in range(len(dom.select(css_selector))):
title_text_print = dom.select(css_selector)[i].text
title_body_text = dom.select(css_selector_body)[i].text
f = open(filepath, "r")
data = f.read()
if title_text_print in data:
pass
print("in_data")
elif title_text_print in title_li_heaven:
pass
print("in_list")
else:
title_li_heaven.append(title_text_print)
# 본문 중에서 url만 뽑아내기. 1, 5, 9 순서로 뽑아냄
a = i*4
get_herf = dom.select(css_selector_url)[a].get("href")
albamon_com = "http://www.alba.co.kr"
# 전체 url 구하기 (sub_url ; 해당 글의 링크)
sub_url = albamon_com + get_herf
b = i+1
fp.write(str(b)+"\n"+title_text_print+"\n"+title_body_text+"\n"+sub_url+"\n")
fp.write(sth_to_tell)
print("END")
driver.quit()
import smtplib
from email.header import Header
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email import utils
from email import encoders
import os
receiver = ["bartkim0426@gmail.com"]
Ccuser = ["bartkim0426@gmail.com"]
mail_title = "신촌알바({time}){mail_title_plus}".format(time=nowdate_time, mail_title_plus = mail_title_plus)
ToUser = receiver
# CcUser = ['참조할 사람 메일 주소1', '참조할 사람 메일 주소2']
FromUser = 'bartkim0426@gmail.com'
Passwd = 'tmfcks47'
Server= 'smtp.gmail.com'
Port = 587
Subject = "{mail_title}".format(mail_title = mail_title)
def send_email(from_user, to_user, cc_users, subject, textfile, attach):
COMMASPACE = ', '
msg = MIMEMultipart('alternative')
msg['FROM'] = from_user
msg['To'] = COMMASPACE.join(to_user)
msg['Cc'] = COMMASPACE.join(cc_users)
msg['Subject'] = Header(s=subject, charset='utf-8')
msg['Date'] = utils.formatdate(localtime = 1)
fp = open(filepath_write, 'rb')
msg.attach(MIMEText(fp.read().decode('utf8', 'ignore')))
fp.close()
if (attach != None):
part = MIMEBase('application', 'octet-stream')
part.set_payload(open(attach, 'rb').read())
encoders.encode_base64(part)
filename = os.path.basename(attach)
part.add_header('Content-Disposition', 'attachment', filename=filename)
msg.attach(part)
#print(Server + ":" + str(Port) + " connecting...")
try:
smtp = smtplib.SMTP(Server, Port)
#smtp.set_debuglevel(1)
try:
#smtpserver.ehlo()
smtp.starttls()
smtp.login(FromUser, Passwd)
smtp.sendmail(from_user, cc_users, msg.as_string())
print("[OK] send mail")
except:
print("[Error] Fail to send mail")
finally:
#smtp.close()
smtp.quit()
except:
#debug('sendmail', traceback.format_exc().splitlines()[-1])
print("[Error] could no connect")
return False
send_email(FromUser, ToUser, Ccuser, Subject, 'contents.txt', None)
------------------
'backend > 데이터분석' 카테고리의 다른 글
02_1. 사람인, 스펙업(네이버 까페) 인턴 정보 통합 시스템 (selenium, python) (0) | 2016.12.15 |
---|---|
selenium을 통한 중고나라 크롤링 (1) | 2016.11.23 |
project01. dios 구글 크롤링/ 11.19 (0) | 2016.11.19 |
Numpy 복습 (0) | 2016.11.12 |
파이썬 데이터 라이브러리 - 수찬님 강의 1일차 복습 (1/2), 파이썬 기초 (0) | 2016.11.08 |