Phantom

키워드 기반 크롤링 프로젝트 - 1 본문

Project

키워드 기반 크롤링 프로젝트 - 1

Ph4nt0m_ 2018. 2. 7. 18:30
반응형
우선 방식을 이렇게 하려한다

  1. 1개의 사이트, 개수지정 크롤링
  2. 1개의 사이트, 키워드 기반 개수 지정 크롤링
  3. N개의 사이트, 키워드 기반 개수 지정 크롤링
  4. 필터링 작업 및 Visualizing

나는 먼저 보안뉴스를 크롤링 대상으로 정했다.

사이트에 들어가 보면 각 기사들이 나열 되는데


이 부분을 크롤링 할 것이다.

많은 컨텐츠가 필요한것이 아니기때문에 크롤링 방식은 RSS 피드를 긁어올것이다.

 

이 부분에서 title, link, date를 긁어올것이다.

scrapy shell로 테스트 결과 바로 200 OK response가 오므로 굳이 리퀘스트정보는 조사할 필요가 없을것 같다.

값도 있겠다 이제 프로그래밍을 해준다.

items.py


pipelines.py


settings.py에 다음 라인 추가
DEFAULT_ITEM_CLASS = 'newscrawl.items.NewscrawlItem'
ITEM_PIPELINES = {
    'newscrawl.pipelines.NewscrawlPipeline': 1,
}

newscrawl_spiders.py


크롤링 후 결과물은 json파일로 나오기에 활용도가 다양하다

url 처리에서 문제가 있다.


링크를 가져오는 과정에 있어서 해당 사이트에서 상대 경로를 크롤링해온다.

나는 전체 링크를 원하기 때문에 url 작업을 해야한다.


python3 버전에서 많은 라이브러리 들이 바뀌었는데 그중에 url관련, request관련, unicode/utf-8인코딩 관련 라이브러리들이 제일 많이 바뀐것 같다
체감상 그렇다 이유는 난 저 세가지를 지금 다 써야 하기 때문에 ^^;;


기존 parse 함수에서 item을 저장할때 노란 박스 형식으로 바로 저장을 했다면
urljoin 함수를 사용해서 앞의 url을 추가하여 join 시킨 데이터를 저장하자.

*참고로 반복문에서 response객체로 얻어오는 sel 변수는 SelectorList 객체이다 Urljoin함수는 str변수가 아닌 객체는 join할 수 없다. 때문에  0번째 데이터를 가져와서 Join시켰다.

결과


이제 다음방식은 1개의 사이트에서 키워드 관련 기사 링크하기 이다.

참고 링크


반응형
Comments