728x90
기존 방법
f12를 눌러 사이트의 정보를 탐색한다.
- selenium을 이용할 경우 xpath를 찾고 고생 끝에 구축한다.
- beautiful soup를 이용해 해당 정보의 구조를 잘 파악해야 한다.
기존 방법의 단점
- 힘들다.. 번거롭다
- 매번 귀찮다.
새로운 방법
KB 부동산 시세를 보는 사이트를 예로 들겠다.
onland.kbstar.com/quics?page=C059652
f12를 누르고 Network를 본다.
request 방식이 Get일 경우 좀 더 쉽다
해당한다고 생각하는 요소의 Name을 우클릭하고
링크 주소를 복사한다.
python에선 아래와 같은 코드를 입력하면 json 파일 획득 완료
response = requests.get('복사한 link address를 넣어준다.')
json_data = json.loads(response.text)
Post 방식의 경우
1. 코드 방식
json으로 받아준다!
import requsts
import json
def web_request(method_name, url, dict_data, is_urlencoded=True):
"""Web GET or POST request를 호출 후 그 결과를 dict형으로 반환 """
method_name = method_name.upper() # 메소드이름을 대문자로 바꾼다
if method_name not in ('GET', 'POST'):
raise Exception('method_name is GET or POST plz...')
if method_name == 'GET': # GET방식인 경우
response = requests.get(url=url, params=dict_data)
elif method_name == 'POST': # POST방식인 경우
if is_urlencoded is True:
response = requests.post(url=url, data=dict_data, headers={'Content-Type': 'application/x-www-form-urlencoded'})
else:
response = requests.post(url=url, data=json.dumps(dict_data), headers={'Content-Type': 'application/json'})
dict_meta = {'status_code':response.status_code, 'ok':response.ok, 'encoding':response.encoding, 'Content-Type': response.headers['Content-Type']}
if 'json' in str(response.headers['Content-Type']): # JSON 형태인 경우
return {**dict_meta, **response.json()}
else: # 문자열 형태인 경우
return {**dict_meta, **{'text':response.text}}
url = link_address # 접속할 사이트주소 또는 IP주소를 입력한다
data = request_body # 요청할 데이터
response = web_request(method_name='POST', url=url, dict_data=data, is_urlencoded=False)
print(response)
if response['ok'] == True:
print('ok')
# 성공 응답 시 액션
else:
pass
# 실패 응답 시 액션
json 저장은? 저장할 파일 이름을 인자로 주고 open으로 연후, json.dump를 사용해 json을 저장해준다!
with open("temp.json", "w") as json_file:
json.dump(response, json_file)
위 코드를 입력하기 번거롭다~ 하시는 분은 아래 참조!
2. 추가적인 프로그램 사용
www.telerik.com/download/fiddler-everywhere
fiddler를 사용한다.
관련 사용법은 다른 포스트를 참조하시기 바란다.
이 포스트와 유사한 포스트는 아래에 있다.
'Data handling > Web crawling' 카테고리의 다른 글
DevToolsActivePort file doesn't exist error 해결법 (1) | 2021.02.19 |
---|---|
[selenium] js 동적 페이지 크롤링 하기 (주로 댓글) iframe, #document 해결 (0) | 2021.02.12 |
[scrapy] 403 error 발생시 대처법 (0) | 2021.02.09 |
[오픈 Api 이용하기] 금융위원회_기업기본정보 python, 공공 데이터 (2) | 2020.07.01 |
[크롤링] beautiful soup에 관하여, 내가 bs를 쓰지 않는 이유 (0) | 2020.06.26 |