1.17~18 web scraping

hun2__2·2022년 1월 17일
0

Have a fruitful vacation

목록 보기
19/24

계획보다 react가 늦어진 관계로 오늘은 python 공부를 시작했다ㅜ (챌린지 하려면 해야지!)

먼저 http통신을 위해서 requests 라이브러리를 설치해준다.
pip install requests

(참고 : https://docs.python-requests.org/en/latest/user/quickstart/)

request안의 메소드를 이용해서 통신을 할 수 있는데
.get(url) : 해당 url data를 받아온다.
.post(url, data) : 해당 url에 data를 생성한다.
.put(url, data) : 해당 url에 data를 수정한다.
.delete(url, data) : 해당 url에 data를 삭제한다.

CRUD operation이 모두 가능하며 더 많은 기능이 있다.

scraping을 위해서는 get으로 web data를 받아오고 그 안에 있는 정보중 필요한 부분만 추출할 것이다.

여기서 HTML 태그들을 파싱해주는 라이브러리인 beautifulsoup도 추가로 설치해준다.
pip install bs4

사실상 requests로 url의 text를 받은 후 그 안의 html 코드들을 scraping하는 것을 beautifulsoup을 이용할 것이다.

먼저 필요한 url의 html data를 받아오고 그 text를 html코드로 분류해준다

import requests
from bs4 import BeautifulSoup

reault = request.get(URL)
soup = BeautifulSoup(result.text, 'html.parser')

beautifulsoup에는 여러가지 태그를 파싱하는 메서드들이 있는데

  1. 모든 a 태그 검색
    soup.find_all("a")
    soup("a")

  2. string 이 있는 title 태그 모두 검색
    soup.title.find_all(string=True)
    soup.title(string=True)

  3. a 태그를 두개만 가져옴
    soup.find_all("a", limit=2)

  4. string 검색
    soup.find_all(string="Elsie") # string 이 Elsie 인 것 찾기
    soup.find_all(string=["Tillie", "Elsie", "Lacie"]) # or 검색
    soup.find_all(string=re.compile("Dormouse")) # 정규식 이용

  5. p 태그와 속성 값이 title인 값 반환
    soup.find_all("p", "title")

  1. a태그와 b태그 찾기
    soup.find_all(["a", "b"])

  2. 속성 값 가져오기
    soup.p['class']
    soup.p['id']

  3. string을 다른 string으로 교체
    tag.string.replace_with("새로운 값")

  4. 보기 좋게 출력
    soup.b.prettify()

  5. 간단한 검색
    soup.body.b # body 태그 아래의 첫번째 b 태그
    soup.a # 첫번째 a 태그

  6. 속성 값 모두 출력
    tag.attrs

  7. class로 찾고 싶을땐
    soup.find_all("a", {'class' : 'sister'})

  8. find()는 해당하는 첫번째 태그만 반환
    find_next()는 해당태그 다음 태그 반환
    find_all()는 해당태그 모두 반환
    find_all('div', recursive=False) 1단계depth만 반환

  9. find 할 때 확인
    if soup.find("div", title=True) is not None:
    i = soup.find("div", title=True)

  10. data-로 시작하는 속성 find
    soup.find("div", attrs={"data-value": True})

  11. 태그명 얻기
    soup.find("div").name

  12. 속성 얻기
    soup.find("div")['class'] # 만약 속성 값이 없다면 에러
    soup.find("div").get('class') # 속성 값이 없다면 None 반환

  13. 속성이 있는지 확인
    tag.has_attr('class')
    tag.has_attr('id')
    있으면 True, 없으면 False

  14. 태그 삭제
    a_tag.img.unwrap()

  15. 태그안에 값 반환
    tag.get_text()
    tag.get_text( , strip=True) 사용하면 공백 제거해줌
    teg.string #안에 여러태그 있으면 에러남

(참고:
https://nomadcoders.co/python-for-beginners/lectures/123
https://www.crummy.com/software/BeautifulSoup/bs4/doc/_)

이를 이용해서 먼저 indeed의 python 검색결과를 scraping 해보았다...
뭔가 딱히 정리할 게 없다,,,

그냥 메서드 익히면서 stackoverflow에서도 정보 얻어오고
내일 강의 마저 들은 후 챌린지 해봐야겠다!!


ps. 쪽팔린 일이다... 내가 못나서 부모님의 지원을 받는다. 투자받은 거라 생각하고 하루빨리 투자금 회수 하실수 있도록 하자. 내일부터 아침운동 다시 시작이다. 미루면 끝도없다. 화이팅하자!
profile
과정을 적는 곳

0개의 댓글