개발/PYTHON

파이썬 requests 에서 태그 내 값이 안나오는 경우

Aireee 2022. 6. 5. 11:07
300x250
반응형

요새 나는 파이썬을 이용해 크롤링을 하고 있는데, 이 크롤링은 크게 3가지 방법이 있다. 물론 내가 아는 범위 내에서 말이다. 그 중 하나는 requests 이고, 또 다른 하나는 selenium 그리고 마지막 하나는 pyautogui 를 이용한 방식이다. 이 3가지는 모두 각각 장단점이 존재한다. 

Requests 
- 특징 : 터미널 창 형식으로 특정 서버에 접속해 응답한 데이터를 빠르게 받아온다. 
- 장점 : 속도가 빠르다, 눈에 보이지 않는다. 
- 단점 : 자바스크립트를 이용해 웹에 뿌려지는 데이터의 경우 데이터가 출력되지 않을 수 있다.

Selenium
- 특징 : 마우스와 브라우저를 통제하여 만들어놓은 루틴에 따라 움직이고 클릭하게 할 수 있다.
- 장점 : Requests 의 단점을 극복할 수 있다. 
- 단점 : 실제 사용방식과 일치한 방식으로 움직이기 때문에 속도가 request보다 느리다

pyautogui
- 특징 : 마우스 제어 프로그램으로, 웹 뿐만 아니라 내 컴퓨터 화면에 떠있는 모든 것을 제어할 수 있다
- 장점 : 쉽다, 그리고 컴퓨터를 제어할 수도 있다
- 단점 : 화면을 읽지 않고, 마우스만을 통제한다. 

사실 이중 pyautogui 는 크롤링에 잘 사용되지는 않는다. 할수는 있지만 말이다. 나는 현재 Requests 를 사용중이다. 

Requests 를 사용해서, 업무에 필요한 사이트에 접속해 웹페이지를 읽어들이는데 내가 필요한 것은 특정 태그 내에 존재하는 데이터였는데, 그 데이터가 나오지 않는 것이었다. 그래서 selenium 방식으로 다시 짜려고 하다가 문득 생각해보니까, 같은 페이지를 읽는 다른 컴퓨터에 있는 프로그램에서는 데이터가 가져와졌다는 사실을 발견했다. 

그리고 결국 해결해 냈는데.... 

원인은 쌍따옴표에 있었다. 대충 아래와 같은 형식의 코드가 원래 데이터이다.

import requests
j = 2321
x = 332
url = "https://사이트/asbdd/asdfasf.php?oo=" + str(x) + "&asdf=" + str(j)
response = requests.get(url)
if response.status_code == 200:
	html = response.text
	print(html)

변경된 데이터는 아래와 같았다. 단지 url 값을 감싸는 " (쌍따옴표)만 '(홑따옴표) 로 바꿨을 뿐이었다.

import requests
j = 2321
x = 332
url = 'https://사이트/asbdd/asdfasf.php?oo=' + str(x) + '&asdf=' + str(j)
response = requests.get(url)
if response.status_code == 200:
	html = response.text
	print(html)

이렇게 변경하자 그 때 부터는 나오지 않았던 태그 속 값이 함께 출력됬다. 

해결은 간단했지만, 왜 이런지는 사실 잘 모르겠다. 보통 따옴표의 종류에 따라 무언가 바뀐다고 생각했던 적은 없었던 것 같은데 왜 이런일이 생긴건지 모르겠으나, 아무튼 행복한 일이자, 내가 경험한 새로운 특징이기에, 누군가 나처럼 고생하고 있는 사람이 있다면 이렇게라도 우선 한번 해보라고 알려주고 싶어서 쓰는 글이다. 

물론 이 글은 남들보다는 내가 나중에 다시 보기 위함이기도 하지만

반응형