본문 바로가기

공부/웹크롤링

[python/파이썬] 크롤링 초보가 겪은 위기 정리

파이썬을 통해 약 50개의 페이지를 크롤링하면서 겪었던 어려운 점을 정리하려고 한다.

 

1. 로그인이나 클릭해야 팝업창으로 뜨는 경우

크롤링 입문시, 보통 Beautifulsoup방식으로 배운다.

환경세팅없이 라이브러리만 설치해서 쓰는 간편함과 Selenium보다 속도가 빠르다는 장점이 있지만 모든 페이지를 커버할 수가 없다.

이 경우 중 보편적인 형식이 로그인, 검색 등의 원하는 정보를 입력 또는 클릭해야하는 경우이다. 실제로 해보면 soup을 이용해 가져왔는데도 원하는 html이 없다면 거의 위의 경우에 속한다.  이럴땐 Selenium을 이용해 동적페이지로 가져와야한다.

그리고 태그 접근 규칙은 xpath로 하면 거의 문제가 없다.

관련 설명은 전에 정리해놓은 포스팅을 참고하자.

 

2. 페이지번호가 url에 없는 경우

프로그래밍을 하면서 가장 중요한 점은 규칙을 파악하는 것이다.

하지만 직관적으로 규칙이 보이는데 url에 파라미터가 없거나 변하지 않아 이동하는 데 난감하곤 했다.

이럴 땐 위와 같이 Selenium이용하거나, 개발자도구>Network 콘솔에 들어가 동작하는 페이지가 숨겨져 있는 지 확인해서 그 url을 통해 접근한다.

또한 그 url이 html형식이 아니라 json형식으로 되어있을 땐 아래와 같은 코드를 이용했다. BeautifulSoup을 이용하지 않는다는 점에 유의하자.

(운 좋으면 한 페이지에 보여줄 수 있는 정보개수가 담긴 파라미터가 들어간  url을 발견할 수 있다. 그럴땐 행개수를 최대한으로 설정해 반복문을 줄이면 순식간에 가져올 수 있다)

response = requests.get('http://www.~~~~~~~~~~?address1=&address2=&searchWord=&storeType=ALL&specialZone1=&specialZone2=&specialZone3=&showMode=&page={}&rec=6'.format(n+1))
response.encoding = 'utf-8'
j = json.loads(response.text)

for store in j['resultObj']['shopInfoList']:
   name = store['displayName']
   addr = store['streetName']
   tel = store['phone1']

'공부 > 웹크롤링' 카테고리의 다른 글

[Python/파이썬] BeautifulSoup, Selenium으로 웹크롤링  (1) 2020.01.23