본문 바로가기

Python/Crawling

[Python웹크롤링] requests 와 lxml 을 사용한 스크래핑

반응형

이번 복습 컨텐츠는 lxml 패키지를 이용해서 특정 데이터를 갖고오는 내용에 대해 다룰 것이다.

 

필요한 패키지 import

가장 우선적으로 url에 요청을 하기 위해서 requests 패키지를 import한다. 그리고 lxml.html 패키지 중 fromstring(문자열로 저장하는 class)와 tostring 클래스를 import 한다. 왜냐하면 html 구조를 갖고오는 데이터는 문자열로 저장되지 않기 때문이다.

 

main 함수 정의

우선 스크래핑을 실행하는 데 결정적 역할을 하는 main 함수에 대해 정의해 보았다. 가장 우선적으로 해주어야 하는 일은 세션을 활성화시키는 것이다. 

( #세션이란? 해당 url에 계속 흐름이 끊기지 않고 접속해 있는 것을 말한다 ) 

그리고 get 함수를 이용해 해당 URL을 요청한다

( 여기서 get 방식을 이용했는데, 비밀 정보가 필요할 때는 post방식을 이용한다. 예를 들면, 'G마켓' 이라는 홈페이지에서 회원들의 배송 정보에 대한 데이터를 가져올 때 같이 말이다 ) 

그리고 urls 에 scrape_news_list_page라는 내가 정의한 함수 인자에 response 즉, 네이버 URL을 얻어온 것을 넣는다.

urls 변수를 출력해보면 딕셔너리 형태로 출력된다. 그리고 for 반복문에 items() =(딕셔너리 구조에서 키와 벨류를 모두 불러오는 함수) 를 이용하여 name과 url을 출력시킨다.

scrape_news_list_page 함수에 대한 정의

우선 빈 딕셔너리를 정의 해주고 root라는 변수에 response( get한 url )의 content(내용)를 문자열로 저장시켜준다.

그리고 xpath를 이용해 갖고 오고 싶은 데이터의 위치를 가리켜준다 ( html 구조에서 찾는 것! ) 

xpath 인자에 대한 기호의 설명은 해당 코드 사진의 주석에 설명되어 있으니 잘 읽어보자!

그리고 name과 url에 extract_contents라는 새로운 함수에다가 변수 a에 대한 반복문을 통해서 할당시켜주고 urls라는 딕셔너리에 name을 키값으로 주고 url을 벨류로 준다 그리고 urls(딕셔너리를) return한다.

extract_contents 함수에 대한 정의

extract_contents 함수는 내가 직접 정의한 것으로 xpath 인자로 넣어준 태그의 내가 갖고오고 싶은 속성을 갖고오기 위해 정의해 준 것이다. 위의 코드에서 보면 'href'라는 속성( 즉, hmtl구조에서 href 속성은 url 값을 의미함 )을 넣어주었고

name 즉, 위의 urls(딕셔너리)의 키값에 할당해줄 값들을 xpath와 속성 'alt'라는 것을 이용해서 할당해 준다.

간단한 css 선택자 기호 설명

그리고 마지막으로 "스크래핑 시작" 주석으로 스크래핑을 실행해주는 조건문을 달아준다.

 

이 코드는 해당 웹크롤링 강의를 듣고 난 후 내가 직접 다른 사이트에 적용해보면서 직접 적는 코드들이다. 사실 아직도 백지상태에서 적어보라고 하면 머뭇머뭇거리고 잘 못적기도 한다... 하지만 계속 반복을 통해 습득하면 어느 순간 알게 될 것이라고 믿는다. 단순히 코드 자체를 외운다기 보단 코드의 흐름과 코드의 의미를 기억하는 것에 포커스를 맞추려 한다. 

반응형