>  기사  >  백엔드 개발  >  Twitter 데이터를 크롤링하기 위한 Scrapy 프레임워크 구현

Twitter 데이터를 크롤링하기 위한 Scrapy 프레임워크 구현

WBOY
WBOY원래의
2023-06-23 09:33:142732검색

트위터 데이터를 크롤링하기 위한 Scrapy 프레임워크 구현

인터넷이 발전하면서 소셜 미디어는 사람들이 널리 사용하는 플랫폼 중 하나가 되었습니다. 세계 최대의 소셜 네트워크 중 하나인 트위터는 매일 엄청난 양의 정보를 생성합니다. 따라서 트위터에서 데이터를 효과적으로 획득하고 분석하기 위해 기존의 기술적 수단을 어떻게 활용하는가가 특히 중요해졌습니다.

Scrapy는 특정 웹사이트의 데이터를 크롤링하고 추출하도록 설계된 Python 오픈 소스 프레임워크입니다. 다른 유사한 프레임워크와 비교할 때 Scrapy는 확장성과 적응성이 더 높으며 Twitter와 같은 대규모 소셜 네트워크 플랫폼을 잘 지원할 수 있습니다. 이 기사에서는 Scrapy 프레임워크를 사용하여 Twitter 데이터를 크롤링하는 방법을 소개합니다.

  1. 환경 설정

크롤링 작업을 시작하기 전에 Python 환경과 Scrapy 프레임워크를 구성해야 합니다. Ubuntu 시스템을 예로 들면 다음 명령을 사용하여 필수 구성요소를 설치할 수 있습니다.

sudo apt-get update && sudo apt-get install python-pip python-dev libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev
sudo pip install scrapy
  1. 프로젝트 생성

Scrapy 프레임워크를 사용하여 Twitter 데이터를 크롤링하는 첫 번째 단계는 Scrapy 프로젝트를 생성하는 것입니다. 터미널에 다음 명령을 입력하세요.

scrapy startproject twittercrawler

이 명령은 현재 디렉터리에 "twittercrawler"라는 프로젝트 폴더를 생성합니다. 이 폴더에는 자동으로 생성된 일부 파일과 폴더가 포함되어 있습니다.

  1. 구성 프로젝트

Scrapy 프로젝트를 열면 "settings.py"라는 파일을 볼 수 있습니다. 이 파일에는 크롤러 지연 시간, 데이터베이스 설정, 요청 헤더 등과 같은 다양한 크롤러 구성 옵션이 포함되어 있습니다. 여기에는 다음 구성 정보를 추가해야 합니다.

ROBOTSTXT_OBEY = False
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
DOWNLOAD_DELAY = 5
CONCURRENT_REQUESTS = 1

이 구성 옵션의 기능은 다음과 같습니다.

  • ROBOTSTXT_OBEY: robots.txt 프로토콜을 따를지 여부를 나타내며 여기서는 False로 설정하고 프로토콜을 따르지 않습니다.
  • USER_AGENT: 크롤러가 사용하는 브라우저 유형과 버전을 나타냅니다.
  • DOWNLOAD_DELAY: 각 요청의 지연 시간을 나타내며 여기서는 5초로 설정됩니다.
  • CONCURRENT_REQUESTS: 동시에 전송된 요청 수를 나타냅니다. 여기서는 안정성을 보장하기 위해 1로 설정됩니다.
  1. 크롤러 만들기

Scrapy 프레임워크에서 각 크롤러는 "Spider"라는 클래스를 통해 구현됩니다. 이 수업에서는 웹 페이지를 크롤링 및 구문 분석하고 이를 로컬 또는 데이터베이스에 저장하는 방법을 정의할 수 있습니다. Twitter에서 데이터를 크롤링하려면 "twitter_spider.py"라는 파일을 만들고 그 안에 TwitterSpider 클래스를 정의해야 합니다. 다음은 TwitterSpider의 코드입니다.

import scrapy
from scrapy.http import Request

class TwitterSpider(scrapy.Spider):
    name = 'twitter'
    allowed_domains = ['twitter.com']
    start_urls = ['https://twitter.com/search?q=python']

    def __init__(self):
        self.headers = {
            'Accept-Encoding': 'gzip, deflate, br',
            'Accept-Language': 'en-US,en;q=0.5',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
            'X-Requested-With': 'XMLHttpRequest'
        }

    def parse(self, response):
        for tweet in response.xpath('//li[@data-item-type="tweet"]'):
            item = {}
            item['id'] = tweet.xpath('.//@data-item-id').extract_first()
            item['username'] = tweet.xpath('.//@data-screen-name').extract_first()
            item['text'] = tweet.xpath('.//p[@class="TweetTextSize js-tweet-text tweet-text"]//text()').extract_first()
            item['time'] = tweet.xpath('.//span//@data-time').extract_first()
            yield item

        next_page = response.xpath('//a[@class="js-next-page"]/@href').extract_first()
        if next_page:
            url = response.urljoin(next_page)
            yield Request(url, headers=self.headers, callback=self.parse)

TwitterSpider 클래스에서는 크롤링할 웹사이트의 도메인 이름과 시작 URL을 지정합니다. 초기화 기능에서는 안티 크롤러에 의해 제한되지 않도록 요청 헤더를 설정했습니다. 구문 분석 기능에서는 XPath 표현식을 사용하여 획득한 웹 페이지를 하나씩 구문 분석하고 이를 Python 사전에 저장합니다. 마지막으로 Scrapy 프레임워크가 이를 로컬 또는 데이터베이스에 저장할 수 있도록 항복 문을 사용하여 사전을 반환합니다. 또한 간단한 재귀 함수를 사용하여 Twitter 검색 결과의 "다음 페이지"를 처리하므로 더 많은 데이터를 쉽게 얻을 수 있습니다.

  1. 크롤러 실행

TwitterSpider 클래스 작성을 마친 후 터미널로 돌아가서 방금 생성한 "twittercrawler" 폴더를 입력하고 다음 명령을 실행하여 크롤러를 시작해야 합니다.

scrapy crawl twitter -o twitter.json

이 명령 "twitter"에 대한 크롤러라는 크롤러를 시작하고 결과를 "twitter.json"이라는 파일에 저장합니다.

  1. 결론

지금까지 Scrapy 프레임워크를 사용하여 트위터 데이터를 크롤링하는 방법을 소개했습니다. 물론 이것은 시작일 뿐입니다. TwitterSpider 클래스를 계속 확장하여 더 많은 정보를 얻거나 다른 데이터 분석 도구를 사용하여 얻은 데이터를 처리할 수 있습니다. Scrapy 프레임워크의 사용법을 학습함으로써 데이터를 보다 효율적으로 처리하고 후속 데이터 분석 작업에 대해 보다 강력한 지원을 제공할 수 있습니다.

위 내용은 Twitter 데이터를 크롤링하기 위한 Scrapy 프레임워크 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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