#01 Python Webscraper
Note
# 목표
- Indeed와 StackOverFlow에 올라와 있는 Python jobs에 대한 정보들을 모아 엑셀
# 해야할 것
- Go to the URL to access to the website
- Find out how many pages exist
- We need to start going into the pages page by page
- Get HTML in the website
- Extract datas from that HTML
# Request Module
-
url을 request 하기 위해 사용
https://github.com/psf/requests
-
아래와 같이 하면 indeed_result란 변수에 해당 링크에 들어있는 내용이 get해지고, 변수.text를 프린트하면 그 페이지에 있는 텍스트들이 쭉 출력된다.
url을 request 하기 위해 사용
https://github.com/psf/requests
아래와 같이 하면 indeed_result란 변수에 해당 링크에 들어있는 내용이 get해지고, 변수.text를 프린트하면 그 페이지에 있는 텍스트들이 쭉 출력된다.
# Beautiful Soup
: A very useful package to extrat information from html.
https://www.crummy.com/software/BeautifulSoup/
- All we have to do is to install it. 리플에서 코딩중이면 아래의 package 메뉴에서 검색해서 install할 수 있다.
# Inspect 요소 찾기 팁
- 해당 페이지에서 ctrl+shift+i를 누르면 창이 생성되면서 소스코드가 어떻게 구성되어있는지 볼 수 있다.
- 그 상태에서 ctrl+shift+c를 누르고, 마우스를 찾는 곳 위에다 올려 클릭을 하면 새로 생성된 창에서 해당하는 요소를 확인할 수 있다.
a_string = "string"
b_number(integer) = 3
c_number(integer) = 5
d_float = 6.12
e_boolean = True/False
f_nonetype = None
g_list = ["Mon", "Tue", "Wed", "Thu", "Fri"]
=> None은 boolean과 비슷한데, 참도 거짓도 아닌 nothingness를 뜻하는 말
이런 식으로 변수 지정.
print(b+c) 이런 식으로 프린트 가능. 스트링은 무조건 따옴표/쌍따옴표 안에.
- "False"와 False는 완전히 다른 것
- 자바스크립트에선 true/false
- type(데이터) 로 데이터 타입 확인 가능 => print(type(데이터))
- none은 자바스크립트의 null과 비슷하다.
- 변수 이름을 길게 지을 때 _(underscore)를 사용한다. 뱀 같다 하여 이러한 표기법을 snake case라고 한다. ex. hello_this_is_a_variable
- 자바스크립트에서의 convention은 HelloThisIsAVariable
# Sequence Types
- 시퀀스 안에 내가 원하는 모든 data types을 저장할 수 있다.
List
list = ["Mon", "Tue", "Wed", "Thu", "Fri"]
- 대괄호를 쓰고 쉼표(콤마)로 구분해주면 리스트 생성 가능
- print(list[3]) 라고 하면 Thu 라는 결과가 나오게 할 수 있다. => 리스트 안에 들어가 있는 값(value)들을 따로 불러올 수 있다.
=> 맨 처음에 있는게 0
Operations
- Mutable = I can change / Immutable = I cannot change
- 만약에 값을 바꾸고 싶지 않은 것은 immutable sequence에 넣어줘야 한다.
- List는 mutable sequence.
- 따라서 common and mutable sequence operations 사용 가능
Tuple
Tuple = ("Mon", "Tue", "Wed", "Thu", "Fri")
- Tuple은 immutable sequence. add, reverse, delete, insert 등등 바꿀 수 없다.
- 따라서 list와는 달리 common sequence operations 만 사용 가능
- [ ] 대신 ( ) 사용
- It's the same as list, but I cannot change it. What can I do with Tuple?
위에 캡쳐에 적힌 Common Sequence Operations만 가능
# 변수 팁
- 아래와 같이 파이썬에서 이렇게 같은 변수명을 써줄 수 있다. 이 변수는 오직 이 함수들 안에서만 존재하는 변수이기 때문.
# Unpacking
-
With "recursive=False", we are able to bring just the outter span, not the spans inside spans
-
아래의 경우에서 unpacking을 이용할 수 있는 건 html.find("h3", {"class":"mb4"}).find_all("span", recursive=False)가 두 개의 item, 즉 두 개의 span으로 이루어진 list를 출력해낼 거라는 것을 알기 때문이다. 그에 의해 출력된 첫 번째 value가 처음 쓰여진 변수인 company, 두 번째 value가 location에 저장되는 것. 이를 unpacking value라고 한다.
- get_text(strip=True) can clean the text.
# CSV(Comma Separated Values)
-
Every column must be separated by a comma, and every line is separated by a new line.
-
VSC에서 확장자 csv인 파일 만들어 주고, Excel Viewer라는 extension 설치해주고 command에 CSV: Open Preview 해주면 엑셀 형식 프리뷰 볼 수 있다.
-
본 파일을 구글 스프레드시트에 불러올 수 있다. 구글 스프레드시트 들어간 후 import files > upload the file: Separator type은 comma로 지정
-
파이썬에는 csv를 다루는 기능이 already 탑재되어 있다.
-
open은 파일을 열어주는 역할을 하는 python function인데, 그 파일이 없다면 파일을 생성해준다. mode는, 파일을 열 때 여러가지 모드로 여는 게 가능한데 sometimes 읽기형식으로 파일을 열 수도 있고, 쓰기전용으로 열 수도 있다. 아래 경우는 쓰기만 설정해준 것.
- csv 파일을 적기 위해 csv 라이브러리를 import한 것.
1) 첫줄: open으로 jobs.csv 파일을 열고, 그것을 file이란 변수에 저장해준 것
2) 둘째줄: writer를 만들어 방금 연 그 파일에다가 내용을 적어줄 것
3) 셋째줄: writer.writerow로 첫번째 줄에 들어갈 내용들을 적어줌. 하나의 argument만 입력 가능하므로 list로 작성
4) job.values() >>> 딕셔너리의 value 값만 추출 가능! 그대로 두면 그 값의 type이 dict_values이므로 list()를 사용해 type을 바꿔줄 것
5) jobs.csv 파일에 가보면 정보들이 정리된 것을 확인할 수 있다.
6) download as zips
Author And Source
이 문제에 관하여(#01 Python Webscraper), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@elliottjeong/01-Python-Webscraper저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)