>  기사  >  백엔드 개발  >  Scrapy는 뉴스 웹사이트 데이터 수집 및 분석을 구현합니다.

Scrapy는 뉴스 웹사이트 데이터 수집 및 분석을 구현합니다.

PHPz
PHPz원래의
2023-06-22 19:34:351465검색

인터넷 기술의 지속적인 발전으로 뉴스 웹사이트는 사람들이 시사 정보를 얻는 주요 수단이 되었습니다. 뉴스 웹사이트로부터 데이터를 빠르고 효율적으로 수집하고 분석하는 방법은 현재 인터넷 분야의 중요한 연구 방향 중 하나가 되었습니다. 이 기사에서는 Scrapy 프레임워크를 사용하여 뉴스 웹사이트에서 데이터 수집 및 분석을 구현하는 방법을 소개합니다.

1. Scrapy 프레임워크 소개

Scrapy는 Python으로 작성된 오픈 소스 웹 크롤러 프레임워크로, 웹사이트에서 구조화된 데이터를 추출하는 데 사용할 수 있습니다. Scrapy 프레임워크는 Twisted 프레임워크를 기반으로 하며 대량의 데이터를 빠르고 효율적으로 크롤링할 수 있습니다. Scrapy에는 다음과 같은 기능이 있습니다.

  1. 강력한 기능 - Scrapy는 사용자 정의 요청 및 처리기, 자동 메커니즘, 디버깅 도구 등과 같은 많은 유용한 기능을 제공합니다.
  2. 유연한 구성 - Scrapy 프레임워크는 특정 크롤러 요구 사항에 따라 유연하게 구성할 수 있는 다양한 구성 옵션을 제공합니다.
  3. 확장 용이 - Scrapy의 아키텍처 디자인은 매우 명확하고 쉽게 확장 및 2차 개발이 가능합니다.

2. 뉴스 웹사이트 데이터 수집

뉴스 웹사이트에서 데이터를 수집하려면 Scrapy 프레임워크를 사용하여 뉴스 웹사이트를 크롤링할 수 있습니다. 다음은 Sina News 웹사이트를 예로 들어 Scrapy 프레임워크의 사용을 소개합니다.

  1. 새 Scrapy 프로젝트 만들기

새 Scrapy 프로젝트를 만들려면 명령줄에 다음 명령을 입력하세요.

scrapy startproject sina_news

이 명령은 현재 디렉터리에 sina_news라는 새 Scrapy 프로젝트를 만듭니다.

  1. Writing Spider

새로 만든 Scrapy 프로젝트에서는 Spider를 작성하여 웹 크롤링을 구현할 수 있습니다. Scrapy에서 Spider는 웹 사이트 데이터를 크롤링하는 방법을 정의하는 데 사용되는 특수 Python 클래스입니다. 다음은 Sina 뉴스 웹사이트용 Spider의 예입니다.

import scrapy

class SinaNewsSpider(scrapy.Spider):
    name = 'sina_news'
    start_urls = [
        'https://news.sina.com.cn/', # 新浪新闻首页
    ]

    def parse(self, response):
        for news in response.css('div.news-item'):
            yield {
                'title': news.css('a::text').extract_first(),
                'link': news.css('a::attr(href)').extract_first(),
                'datetime': news.css('span::text').extract_first(),
            }

Spider는 뉴스 웹사이트 크롤링 규칙과 응답을 구문 분석하는 방법을 정의합니다. 위 코드에서는 "sina_news"라는 Spider를 정의하고 시작 URL을 Sina News 홈페이지로 지정합니다. 동시에 웹사이트의 응답을 구문 분석하는 구문 분석 기능도 정의했습니다.

이 구문 분석 기능에서는 CSS 선택기 구문을 사용하여 뉴스의 제목, 링크 및 게시 시간을 추출하고 이 정보를 사전 형식으로 반환합니다.

  1. Spider 작성을 완료한 후 Spider를 실행하고 데이터를 크롤링할 수 있습니다. 명령줄에 다음 명령을 입력하세요:
scrapy creep sina_news -o sina_news.json

이 명령은 "sina_news" Spider를 시작하고 크롤링된 데이터를 sina_news.json이라는 JSON 파일에 저장합니다.

3. 뉴스 웹사이트 데이터 분석

데이터 수집이 완료된 후에는 수집된 데이터를 분석하고 그로부터 가치 있는 정보를 추출해야 합니다.

데이터 정리

  1. 대규모 데이터를 수집하다 보면 노이즈가 많은 데이터를 자주 접하게 됩니다. 따라서 데이터 분석을 수행하기 전에 수집된 데이터를 정리해야 합니다. 다음은 Python Pandas 라이브러리를 예로 들어 데이터 정리를 수행하는 방법을 소개합니다.
수집된 Sina 뉴스 데이터 읽기:

import pandas as pd

df = pd.read_json('sina_news.json')

이제 DataFrame 유형의 데이터 세트를 얻습니다. 이 데이터 세트에 중복 데이터가 있다고 가정하면 데이터 정리를 위해 Pandas 라이브러리를 사용할 수 있습니다.

df.drop_duplicates(inplace=True)

위 코드 줄은 데이터 세트에서 중복 데이터를 삭제합니다.

데이터 분석

  1. 데이터 정리 후 수집된 데이터를 추가로 분석할 수 있습니다. 다음은 일반적으로 사용되는 데이터 분석 기술입니다.
(1) 키워드 분석

뉴스 제목에 대한 키워드 분석을 통해 현재 핫이슈를 파악할 수 있습니다. 다음은 Sina 뉴스 제목에 대한 키워드 분석의 예입니다.

from jieba.analyse import extract_tags

keywords = extract_tags(df['title'].to_string(), topK=20, withWeight=False,allowPOS=( ' ns', 'n'))

print(keywords)

위 코드는 jieba 라이브러리의 extract_tags 함수를 사용하여 뉴스 제목의 처음 20개 키워드를 추출합니다.

(2) 시계열 분석

뉴스 제목을 시간순으로 세어보면 뉴스 사건의 동향을 파악할 수 있습니다. 다음은 시나뉴스의 월별 시계열 분석 예시이다:

df['datetime'] = pd.to_datetime(df['datetime'])

df = df.set_index('datetime')

df_month = df .resample('M').count()

print(df_month)

위 코드는 보도자료 시간을 Pandas의 Datetime 유형으로 변환하여 데이터세트의 인덱스로 설정합니다. 그런 다음 resample 함수를 사용하여 월을 다시 샘플링하고 월별 뉴스 릴리스 수를 계산했습니다.

(3) 감성 분석을 통한 분류

뉴스 제목에 대한 감성 분석을 통해 뉴스를 분류할 수 있습니다. 다음은 Sina 뉴스에 대한 감정 분석의 예입니다.

from snownlp import SnowNLP

df['sentiment'] = df['title'].apply(lambda x: SnowNLP(x).sentiments)

positive_news = df [df['sentiment'] > 0.6]

negative_news = df[df['sentiment'] <= 0.4]

print('긍정적인 뉴스 수:', len(긍정적_news))
print('부정적인 뉴스 수: ', 렌(negative_news))

위 코드는 감정 분석을 위해 SnowNLP 라이브러리를 사용하고, 감정 값이 0.6보다 큰 뉴스를 긍정적인 뉴스로 정의하고, 감정 값이 0.4 이하인 뉴스를 부정적인 뉴스로 정의합니다.

4. 요약

이 글에서는 Scrapy 프레임워크를 사용하여 뉴스 웹사이트 데이터를 수집하는 방법과 데이터 정리 및 분석을 위해 Pandas 라이브러리를 소개합니다. Scrapy 프레임워크는 대량의 데이터를 빠르고 효율적으로 크롤링할 수 있는 강력한 웹 크롤러 기능을 제공합니다. Pandas 라이브러리는 수집된 데이터에서 귀중한 정보를 추출하는 데 도움이 되는 다양한 데이터 처리 및 통계 분석 기능을 제공합니다. 이러한 도구를 사용하면 현재 뜨거운 주제를 더 잘 이해하고 유용한 정보를 얻을 수 있습니다.

위 내용은 Scrapy는 뉴스 웹사이트 데이터 수집 및 분석을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.