#01 Python Webscraper

5479 단어 pythonpython

Note

# 목표

  • Indeed와 StackOverFlow에 올라와 있는 Python jobs에 대한 정보들을 모아 엑셀

# 해야할 것

  1. Go to the URL to access to the website
  2. Find out how many pages exist
  3. We need to start going into the pages page by page
  4. Get HTML in the website
  5. Extract datas from that HTML

# Request Module

  • 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

좋은 웹페이지 즐겨찾기