기초 html,css 웹페이지 구조
-네이버 사이트 개발자 도구 , 글자 변경 등
class 문법
데이터와 기능을 함께 묶는 방법을 제공
Python , C++ , Java 등에서 주로 사용 ( 객체지향 프로그래밍
apple = {
"name" : "apple",
"flaver" : "sweet",
"cost" : 5000,
"have" :3,
}
pear = {
"name" : "pear",
"flavor" : "littlesweet",
"cost" : 6000,
"have" :1,
def apple_change():
apple['cost'] +=500
apple['have'] += 1000
def pear_change():
pear['cost'] +=500
pear['have'] +=1000
class fruit:
def __init__ (self,name,flavor,cost,have):
self.name = name,
self.flavor = flavor,
self.cost = cost,
self.have = have
def change(self):
self.cost +=500
self.have +=1000
init : 생성자 함수
self : 인스턴스 본인을 의미, 본인 스스로의 값에 접근 가능
가상환경
가상환경
가상환경, 독립된공간 -> 프로젝트별로 개발환경구축
가상환경은 독립적!
1. python get -pip.py (window)
sudo apt-get install python3-pip(mac
2. pip --version
폴더이동
5. pipenv shell
6. pipnev install request
7. pipenv install bs4
크롤링
인터넷상에 존재하는 웹 문서들을 추적하여 필요한 정보를 수집하는 기법
HTML 페이지를 가져와서, HTML/CSS등을 파싱하고, 필요한 데이터만 추출하는 기법
무분별하게 해당 웹사이트에서 데이터를 가져와서 상업적으로 이용하면 안됨
크롤링으로 수집한 데이터로 이익을 취하면 문제가 될 수 있음
각 사이트에서는 크롤러가 요청을 해도 되거나,
해서는 안되는 사항들을 robots.txt 에서알수있다
beautifulsoup4 - HTML과 XML 문서를 파싱하기 위한 파이썬 패키지
soup.find('p')
soup.find('div',{'class':'클래스 네임명'})
soup.find('img',{'id':'아이디 네임명'})
soup.find_all('div')
soup.select('p')
soup.select('.클래스 네임명')
soup.select('상위태그명 > 하위태그명 > 하위태그명')
soup.select('상위태그명.클래스명 > 하위태그명.클래스명')
soup.select('#아이디명')
soup.select('#아이디명 > 태그명.클래스명)
soup.select('태그명[속성1=값1]')
1.웹 사이트 url에 get요청
2.find나 select 함수를 이용해서 원하는 HTML Element 가져오기
3.원하는 데이터 결과 값 형태로 가공하기
Query String
https://search.shopping.naver.com/search/all.nhn?변수1=값1&변수2=값2
https://search.shopping.naver.com/search/all?pagingIndex=2&pagingSize=80&query=노트북'
import requests
from bs4 import BeautifulSoup
# 우리가 정보를 얻고 싶어 하는 URL
NOTEBOOK_URL = f'https://search.shopping.naver.com/search/all?pagingIndex=1&p
agingSize=80&query=노트북'
# get 요청을 통해 해당 페이지 정보를 저장
notebook_html = requests.get(NOTEBOOK_URL)
# bs4 라이브러리를 통해 불러온 html을 우리가 원하는 형태로 파싱
notebook_soup = BeautifulSoup(notebook_html.text,"html.parser")
print(notebook_soup)
직접 홈피 보면서 쿼리 확인하기
파일열기
notebook_list_box = notebook_soup.find("ul",{"class":"list_basis"})
notebook_list = notebook_list_box.find_all("li",{"class":"basicList_item__2XT81"})
title = notebook_list[0].find("div",{"class":"basicList_title__3P9Q7"}).find("a").string
price = notebook_list[0].find("div",{"class":"basicList_price_area__1UXXR"}).find("span",{"class":"price_num__2WUXn"}).text
print(title)
for notebook in notebook_list:
title = notebook.find("div",{"class":"basicList_title__3P9Q7"}).find("a").string
price = notebook.find("div",{"class":"basicList_price_area__1UXXR"}).find("span",{"class":"price_num__2WUXn"}).text
detail_lists = notebook.find("div",{"class":"basicList_desc__2-tko"}).find_all("a",{"class","basicList_detail__27Krk"})
detail = []
for detail_list in detail_lists:
detail.append(detail_list.text)
notebook_info = {
'title': title,
'price': price,
'detail': detail
}
result.append(notebook_info)
텍스트 추출
CSV파일
CSV (comma-separated values)
① 몇 가지 필드를 쉼표(,)로 구분한 텍스트 데이터 및 텍스트 파일
② 엑셀 프로그램으로 열기 가능
③ 이후, DB에 직접 넣을 수 있는 파일 형식
f-string
fstring
import requests
from bs4 import BeautifulSoup
from note_book import extract_info
import csv
file = open('note_book.csv', mode='w', newline='')
writer = csv.writer(file)
writer.writerow(["title","price","detail"])
final_result = []
for page in range(30):
NOTEBOOK_URL = f'https://search.shopping.naver.com/search/all?pagingIndex={page}&pagingSize=80&query=노트북'
notebook_html = requests.get(NOTEBOOK_URL)
notebook_soup = BeautifulSoup(notebook_html.text,"html.parser")
notebook_list_box = notebook_soup.find("ul", {"class" : "list_basis"})
notebook_list = notebook_list_box.find_all('li', {"class" : "basicList_item__2XT81"})
final_result += extract_info(notebook_list)
for result in final_result:
row = []
row.append(result['title'])
row.append(result['price'])
row.append(result['detail'])
writer.writerow(row)
print(final_result)