Scrapy 연구 탐색 (5) - 자동 다 중 웹 페이지 오 르 기 (누군가의 블 로그 의 모든 글 을 캡 처)
4717 단어 Scrapy
또한, 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
부분 저장 데이터 캡 처:
오리지널http://blog.csdn.net/u012150179/article/details/34486677
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
AWS lambda+scrapy로 정기적으로 서버리스 스크래핑 1.8먼저 결론을 쓰면 Lambda에서 움직이는 곳까지 갈 수 없었습니다. 다른 방법의 대처는 있으므로, 그쪽이 잘 되면 추기, 혹은 다른 기사로서 들려고 생각합니다. 이번에는 작성한 weather_spider.py를 A...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.