lib docs
install
pip install scrapy
Creating a project
# [project_name] 은 프로젝트 이름을 적으면 된다
scrapy startproject [project_name]
간단한 스크레이퍼 작성
import scrapy
class ArticleSpider(scrapy.Spider):
name = 'article'
def start_requests(self):
urls = [
'url_1',
'url_2',
'url_3'
]
return [scrapy.Requests(url=url, callback=self.parse) for url in urls]
def parse(self, response):
url = response.url
title = response.css('h1::text').extract_first()
print('URL is : {}'.format(url))
print('title is : {}'.format(title))
- start_requests : 스크레이피가 웹사이트를 크롤링할 때 사용하는 Request 객체를 생성하는 프로그램에 대해 스크레이피가 정의하는 진입점
- parse : 사용자가 정의한 콜백 함수이며 callback=self.parse 를 사용하여 Request 객체로 전달됩니다.
실행
- #실행 전에 해당 spider가 있는 디렉터리로 가야한다.
scrapy runspider article.py
scrapy crawl article
LinkExtractor, CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
class ArticleSpider(CrawlSpider):
name = 'articles'
allowed_domains = ['wikipedia.org']
start_urls = ['<https://en.wikipedia.org/wiki/Benevolent_dictator_for_life>']
rules = [
Rule(LinkExtractor(allow='^(/wiki/)((?!:).)*$'),
callback='parse_items',
follow=True,
cb_kwargs={'is_article': True}),
Rule(LinkExtractor(allow='.*'),
callback='parse_items',
cb_kwargs={'is_article': False})
]
def parse_items(self, response, is_article):
print(response.url)
title = response.css('h1::text').extract_first()
if is_article:
url = response.url
text = response.xpath('//div[@id="mw-content-text"]//text()').extract()
lastUpdated = response.css('li#footer-info-lastmod::text').extract_first()
lastUpdated = lastUpdated.replace('This page was last edited on ', '')
print('Title is: {} '.format(title))
print('title is: {} '.format(title))
print('text is: {}'.format(text))
else:
print('This is not an article: {}'.format(title))
- LinkExtractor : 제공된 규칙에 따라 HTML 콘텐츠 페이지의 링크를 인식하고 반환하도록 설계된 간단한 클래스입니다. 여러 가지 매개변수를 통해 CSS 및 XPath 선태기, 태그(<a></a> 태그 이외에 링크를 찾을 수도 있습니다.), 도메인 등을 기반으로 링크를 수락하거나 거부할 수 있습니다.
- callback : 페이지 내용을 구문 분석하는 함수
- cb_kwargs : 콜백 함수에 전달할 매개변수 딕셔너리입니다. 이 딕셔너리는 {arg_name1: arg_value1, arg_name2: arg_value2} 형식으로 되어 있으며, 약간 다른 작업에 동일한 파서 함수를 재사용하기 편리합니다.
- follow : 현재 페이지의 링크를 향후 크롤링에 포함할지 여부를 나타냅니다. 콜백 함수가 제공되지 않으면 기본값은 True입니다.(현재 페이지에서 아무것도 하지 않았다면 최소한 크롤링을 계속하긴 해야합니다.) 콜백 함수가 제공되면 기본값은 False입니다.