파이썬, Scrapy 크롤링 예제
글. 수알치 오상문
셀레니움을 이용하다가 스크래피를 처음 사용해봤는데 이용하는 방법이 많이 다르네요. 간단하게 네이버에서 검색하고 그 결과 일부를 출력하는 예제입니다.
스크래피 설치: python -m pip install Scrapy
# Scrapy 네이버 크롤링 예제
import scrapy # python -m pip install Scrapy
from scrapy.selector import Selector
from twisted.internet import reactor
from scrapy.crawler import CrawlerRunner
from scrapy.spiders import Rule
from scrapy.http import Request, FormRequest
import logging
logging.basicConfig(
filename='log.txt',
format='%(levelname)s: %(message)s',
level=logging.INFO
)
class NaverSpider(scrapy.Spider):
name = "NaverSpider"
login_page = "https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fwww.naver.com"
start_urls = "https://www.naver.com"
# 크롤링 시작 메소드
def start_requests(self):
# '수알치' 검색 링크
url = "https://search.naver.com/search.naver?query=수알치&nso=&where=blog&sm=tab_opt"
# 결과를 하나씩 돌려주기
yield scrapy.Request(url=url, callback=self.parse)
'''
# 다중 링크를 처리하는 방법
allowed_domains = ["naver.com"]
urls = ["https://www.naver.com/", 네이버링크2, 네이버링크3, ...]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
'''
# 크롤링 결과 콜백 함수
def parse(self, response):
self.logger.info('Parse function called on %s', response.url)
# response.xpath(), response.css() 검색 결과 받기
# self.result = response.css('.api_txt_lines').getall() # 내부 html 포함하여 선택
# self.result = response.css('.api_txt_lines::text').getall() # 첫 텍스트 선택
self.result = response.css('.api_txt_lines').xpath('string(.)').getall() # 모든 텍스트 선택
# get(): 한개 str
# getall(): 결과 리스트
# extract(): 결과 개수에 따라 str or 리스트 반환 (u문자열 데이터)
if(result) # 첫 항목 출력
print(self.result[0])
if(len(result)>2) # 끝 항목 출력
print(self.result[-1])
if __name__ == "__main__":
runner = CrawlerRunner()
runner.crawl(NaverSpider) # 정의한 spider 클래스 지정
# runner.crawl(DaumSpider) # 여러 spider를 추가 지정 가능
crawler = runner.join()
crawler.addBoth(lambda _: reactor.stop())
reactor.run() # 모두 종료할 때까지 대기
'''
# 이런 방법도 가능하다.
process = CrawlerProcess()
process.crawl(NaverSpider) # 정의한 spider 클래스 지정
process.start()
'''
print("The END!")
[실행 결과]
"매 나간다!" 소리치며 꿩을 잡는 매사냥꾼 수알치
수알치 오상문 다음과 같은 웹 화면에서 I am, You are, We are를 클릭하면, 아래 Article 내용이 변경되는 예제이다. I am을...
The END!
'웹 크롤링, 스크래핑' 카테고리의 다른 글
파이썬, 비동기 크롤러 arsenic 공식 레퍼런스 (0) | 2022.08.02 |
---|---|
파이썬, Scrapy 스크래피 공식 레퍼런스 (0) | 2022.08.01 |
파이썬, Scarpy 스크래피 설치 ERROR: Could not find a version that satisfies the requirement scarpy (from versions: none) (0) | 2022.08.01 |
파이썬, 셀레니움 옵션 최적화 스크롤링 예제 (0) | 2022.08.01 |
셀레니움, 크롤링 안전한 예외처리 예제 (0) | 2022.08.01 |