Scrapy 연구 탐색 (5) - 자동 다 중 웹 페이지 오 르 기 (누군가의 블 로그 의 모든 글 을 캡 처)

4717 단어 Scrapy
우선 튜 토리 얼 (2) (http://blog.csdn.net/u012150179/article/details/32911511) 에서 연구 한 것 은 하나의 웹 페이지 를 오 르 는 방법 이다.튜 토리 얼 에서 (3) (http://blog.csdn.net/u012150179/article/details/34441655) 에서 Scrapy 핵심 구 조 를 논의 했다.현재 (2) 를 바탕 으로 (3) 에서 언급 한 다 중 웹 페이지 를 오 르 는 원리 방법 과 결합 하여 자동 다 중 웹 페이지 를 오 르 는 방법 연 구 를 실시 하고 있다.
또한, Scrapy 의 핵심 구조 와 데이터 흐름 을 잘 이해 하기 위해 서 는 scrapy. spider. Spider 를 파충류 의 기본 으로 사용 합 니 다.
먼저 프로젝트 만 들 기:
scrapy startproject CSDNBlog

1. items. py 작성
여기 서 명확 한 설명 을 위해 글 이름과 글 주소 만 추출 합 니 다.
# -*- coding:utf-8 -*-

from scrapy.item import Item, Field

class CsdnblogItem(Item):
    """          """

    article_name = Field()
    article_url = Field()

pipelines. py 작성
import json
import codecs

class CsdnblogPipeline(object):

    def __init__(self):
        self.file = codecs.open('CSDNBlog_data.json', mode='wb', encoding='utf-8')

    def process_item(self, item, spider):
        line = json.dumps(dict(item)) + '
' self.file.write(line.decode("unicode_escape")) return item

그 중에서 구조 함수 에서 쓰기 가능 한 방식 으로 저장 파일 을 만 들 고 엽 니 다.프로 세 스에 서item 에서 item 처 리 를 실현 합 니 다. 받 은 item 을 json 형식의 출력 파일 에 기록 하 는 것 을 포함 합 니 다.
3. settings. py 작성
setting 파일 에 대해 서 는 spider 에 대한 설정 을 실행 할 때 까지 설정 파일 로 사용 합 니 다.변 하기 쉬 운 설정 매개 변 수 는 spider 류 의 작성 에 넣 을 수 있 으 며, 파충류 가 실행 되 는 과정 에서 변 하지 않 는 매개 변 수 는 settings. py 에서 설정 할 수 있 습 니 다.
# -*- coding:utf-8 -*-

BOT_NAME = 'CSDNBlog'

SPIDER_MODULES = ['CSDNBlog.spiders']
NEWSPIDER_MODULE = 'CSDNBlog.spiders'

#  cookies,   ban
COOKIES_ENABLED = False

ITEM_PIPELINES = {
    'CSDNBlog.pipelines.CsdnblogPipeline':300
}

# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'CSDNBlog (+http://www.yourdomain.com)'

여 기 는 쿠키ENABLED 파 라미 터 를 True 로 설정 해 cookies 판단 에 따라 방문 한 사이트 에서 파충류 궤적 을 발견 하지 못 하 게 함으로써 ban 이 되 는 것 을 방지 합 니 다.
ITEM_PIPELINES 형식 은 사전 으로 시작 하 는 pipeline 을 설정 하 는 데 사 용 됩 니 다. 그 중에서 key 는 정 의 된 pipeline 류 이 고 value 는 시작 순서 이 며 기본 0 - 1000 입 니 다.
파충류
파충류 의 집필 은 시종 중요 한 일이 다.웹 페이지 가 '다음' 링크 를 받 아 Request 대상 으로 돌아 가 는 것 을 분석 하 는 원리 다.더 나 아가 다음 글 이 없 을 때 까지 계속 기 다 렸 다.
코드:
#!/usr/bin/python
# -*- coding:utf-8 -*-

# from scrapy.contrib.spiders import  CrawlSpider,Rule

from scrapy.spider import Spider
from scrapy.http import Request
from scrapy.selector import Selector
from CSDNBlog.items import CsdnblogItem


class CSDNBlogSpider(Spider):
    """  CSDNBlogSpider"""

    name = "CSDNBlog"

    #        1s
    download_delay = 1
    allowed_domains = ["blog.csdn.net"]
    start_urls = [

        #       
        "http://blog.csdn.net/u012150179/article/details/11749017"
    ]

    def parse(self, response):
        sel = Selector(response)

        #items = []
        #    url   
        item = CsdnblogItem()

        article_url = str(response.url)
        article_name = sel.xpath('//div[@id="article_details"]/div/h1/span/a/text()').extract()

        item['article_name'] = [n.encode('utf-8') for n in article_name]
        item['article_url'] = article_url.encode('utf-8')

        yield item

        #        url
        urls = sel.xpath('//li[@class="next_article"]/a/@href').extract()
        for url in urls:
            print url
            url = "http://blog.csdn.net" + url
            print url
            yield Request(url, callback=self.parse)

천천히 분석:
(1)download_delay 매개 변 수 는 1 로 설정 되 어 있 으 며, 다운로드 기 를 다음 페이지 앞 에 다운로드 하 는 대기 시간 을 1s 로 설정 하 는 것 도 ban 을 방지 하 는 정책 중 하나 입 니 다.주로 서버 의 부 하 를 줄 이 는 것 입 니 다.
(2) response 에서 글 링크 와 글 제목 을 추출 하고 utf - 8 로 인 코딩 합 니 다.yield 사용 에 주의 하 세 요.
(3) '다음 편' 의 url 을 추출 합 니 다. 추출 후 부족 하기 때 문 입 니 다.http://blog.csdn.net부분두 print 는 디 버 깅 만 을 위 한 것 으로 실제 적 인 의미 가 없습니다.중점 은
yield Request(url, callback=self.parse)

새로 가 져 온 request 를 엔진 에 되 돌려 주 고 계속 순환 하 는 것 이다.바로 '자동 다음 페이지 의 오 르 기' 를 실현 했다.
집행
scrapy crawl CSDNBlog

부분 저장 데이터 캡 처:
Scrapy研究探索(五)——自动多网页爬取(抓取某人博客所有文章)_第1张图片
오리지널http://blog.csdn.net/u012150179/article/details/34486677

좋은 웹페이지 즐겨찾기