Python의 자료구조
Tuple
list 와 유사하지만 ( ) 로 값을 나열
불변성을 가지므로 튜플은 넣어준 값을 변경할 수 없다는 특징을 가짐 -> 그래서 값을 변경시켜주는 메서드들이 존재 하지 않음
- .count()
- .index()
값에 접근하려면 [ ] 안에 인덱스로 접근해준다. 여기서, 음수값의 인덱스가 들어가면 거꾸로 접근이 가능하다 !!
Dictionary
{ } 안에 키와 값으로 써주며 구분자는 , 이다.
- .get(키) : 키에 해당하는 값을 리턴
- .clear()
- .pop(키) : 키에 해당하는 키와 값을 제거
- 딕셔너리[키] = 값 으로 원하는 키와 값을 추가 가능
For 반복문
for each in 리스트혹은튜플:
// 반복할 내용
for~in 반복문으로 각각의 요소를 전부 돌 수 있음
반대의 의미를 주는 !는 not 키워드를 사용하여 나타내주며, https:// 가 붙지 않은 주소를 고쳐주는 예제
파이썬 패키지 모음 사이트
pip 을 사용하기 위해선 컴퓨터에 pip이 깔려 있는지 확인해줘야 한다.
macOS 의 경우 php3 이 깔려있는 경우가 있으므로 이땐 pip3도 깔려 있을 경우가 크다.
pip3 -v 로 버전을 확인해주고 있다면
pip3 install --upgrade pip
업그레이드 해준다. 그럼 pip도 사용 가능해질 것이다.
만약 pip이 없다면.. 홈브류를 사용하여 다운받아주면 된다.
pip 을 통해서 패키지를 다운 받아주면 된다. (npm 처럼)
pip list
해당 명령어로 패키지 목록도 확인 가능하다.
requests 패키지 사용하기
https://pypi.org/project/requests/
파이썬 코드에서 웹 사이트로 요청을 보내는 것을 가능하게 해줌
pip install 패키지명
from 패키지명 import 꺼내쓸것
from requests import get
requests 의 get 을 가져와서 사용해줄 수 있다. get은 요청 메서드 중의 하나로 웹 사이트를 보여줄 수 있게 요청한다.
이때 반환값은 HTTP의 응답 정보를 가지고 있는데 그중에서 status_code 도 존재한다.
웹 스크래퍼 구현하기
웹 스크래핑란 웹 페이지 상의 내용을 긁어오는? 기능을 의미
beautiful soup
웹 스크래핑을 할 수 있는 파이썬 패키지
pip install beautifulsoup4
몇몇의 웹 사이트들은 스크래핑하는 것을 싫어하므로 이상한 코드를 입력하여 인증하게 만들거나 봇 방지 프로그램을 사용한다.
이용약관 상 상업적 용도로 사용이 불가능할 수 있다.
일단 requests 로 요청 메서드를 가져오자
from requests import get
스크래핑해줄 사이트는 https://weworkremotely.com/remote-jobs/search?&term=python
해당 사이트의 jop 오퍼를 스크래핑 하려고 하는데, 주소값을 읽어와서, 특정 HTML 태그에 접근할 수 있어야 한다.
base_url = 'https://weworkremotely.com/remote-jobs/search?&term='
search_term = 'python'
response = get(f"{base_url}{search_term}")
print(response.text)
response.text 까지 해주면 읽어오는 사이트의 HTML 을 가져올 수 있다.
https://www.crummy.com/software/BeautifulSoup/bs4/doc/
from bs4 import BeautifulSoup
# HTML 긁어오기
response = get(f"{base_url}{search_term}")
if response.status_code != 200:
print('Cant request website')
else:
# print(response.text)
# Beautifulsoup
soup = BeautifulSoup(response.text, 'html.parser')
print(soup.find_all('section', class_='jobs'))
beautifulsoup 사용법은 간단하다. 크롤링 해줄 html 인자를 첫번째로, 다음 인자에는 포맷을 설정해준다.
html.parser 는 html 만 가능하므로 다른 포맷을 원하면 다운로드가 추가로 필요하다고 한다.
읽어온 html을 변수에 저장하고 여러 메서드를 사용하여 정보를 뽑아내면 된다.
강의에선 파이썬과 관련된 일자리의 정보를 가져오고 싶으므로 find_all(태그, 속성) 메서드를 사용해주었다.
section 태그의 jobs 클래스를 가져와서 -> li 요소들을 가져오되, 마지막 li(view-all 클래스)을 제외한 값 pop(-1)
from requests import get
from bs4 import BeautifulSoup
base_url = 'https://weworkremotely.com/remote-jobs/search?&term='
search_term = 'python'
# HTML 긁어오기
response = get(f"{base_url}{search_term}")
if response.status_code != 200:
print('Cant request website')
else:
results = []
# Beautifulsoup
soup = BeautifulSoup(response.text, 'html.parser')
jobs = soup.find_all('section', class_='jobs')
for job_section in jobs:
job_posts = job_section.find_all('li')
job_posts.pop(-1) # find_all 은 list 를 리턴
for post in job_posts:
anchors = post.find_all('a')
anchor = anchors[1]
link = anchor['href']
company, kind, region = anchor.find_all('span', class_='company')
title = anchor.find('span', class_='title')
job_data = {
'position': title.string,
'company': company.string,
'kind': kind.string,
'region': region.string,
'link' : link.string,
}
results.append(job_data)
print(results)
모듈로 분리하기
from requests import get
from bs4 import BeautifulSoup
def extract_wwr_jobs(search_term):
base_url = 'https://weworkremotely.com/remote-jobs/search?&term='
# HTML 긁어오기
response = get(f"{base_url}{search_term}")
if response.status_code != 200:
print('Cant request website')
else:
results = []
# Beautifulsoup
soup = BeautifulSoup(response.text, 'html.parser')
jobs = soup.find_all('section', class_='jobs')
for job_section in jobs:
job_posts = job_section.find_all('li')
job_posts.pop(-1) # find_all 은 list 를 리턴
for post in job_posts:
anchors = post.find_all('a')
anchor = anchors[1]
link = anchor['href']
company, kind, region = anchor.find_all(
'span', class_='company')
title = anchor.find('span', class_='title')
job_data = {
'position': title.string,
'company': company.string,
'kind': kind.string,
'region': region.string,
'link': f"http://weworkremotely.com{link}",
}
results.append(job_data)
return results
분리해준 모듈을 사용하기 위해선
from 폴더명.파일명 import 모듈
이런 식으로 사용해준다.
from extractors.wwr import extract_wwr_jobs
python_jobs = extract_wwr_jobs('python')
print(python_jobs)
정상 작동됨
'Web Study > 노마드코더' 카테고리의 다른 글
노마드코더 python 웹 스크래퍼 만들기 - 3 (0) | 2023.06.16 |
---|---|
노마드코더 python 웹 스크래퍼 만들기 - 1 (0) | 2023.06.14 |
노마드코더 JS로 그림 앱 만들기 - 마지막 (2) | 2023.06.10 |
노마드코더 JS로 그림 앱 만들기 - 2 (0) | 2023.06.09 |
노마드코더 JS로 그림 앱 만들기 - 1 (0) | 2023.06.08 |