Scrapy爬虫類フレームワーク入門

3504 ワード

1、強く推薦するScrapyフレームワーク教程:http://blog.csdn.net/column/details/younghz-scrapy.html
2、フレームワークの説明:
2.1:
                                       Scrapy爬虫框架入门_第1张图片
フレームワークを整理するには、初心者が参加する必要があるのはSpidersとitem Pipelineモジュールです.
各モジュールの役割:
Spiderモジュール:Webページの解析とurlリクエストの送信.
Itemモジュール:保存データのフォーマットを定義し、辞書で保存し、N個のフィールドを定義できる
Pipelineモジュール:定義解析後のデータをファイルに書き込む
以下の具体例を説明する.
コードは借用ブログです.http://blog.csdn.net/u012150179/article/details/34486677
Spiderモジュールでは、データを解析し、新しいURLリクエストを送信する必要があります.もちろん、新しいURLも解析ページで得られます.
#!/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)

関数#カンスウ#
def parse(self, response)

1、responseはscrapyフレームワーク全体であり、制御センターは要求をダウンロード器に送信し、ダウンロード器はウェブページ全体をダウンロードした後、制御センターから結果(Response)をspider解析に返信する(spiderがウェブページを解析する機能はここで体現する).もちろん、Responseという結果では、再アクセスが必要なurlを解析し、URLリクエストを送信し続けることができ、Requestリクエストで完了することができます.
2、parseでは、私たちが必要とするデータを解析し、yield itemを取得すれば、私たちのデータを得ることができます.データフォーマットについては、itemの定義、データがどのコードに保存されているか、どのファイルがあるか、pipelineを見ます.
3、それからresponseの中であなたが引き続きアクセスしたいURLを含んで解析して、要求を送信して、スケジューラがどのようにスケジューラをスケジューリングして、ダウンロードして、スケジューラは更に結果を返すなどの一連の過程について、私达が介入する必要はなくて、これはフレームワークの作用で、私达は関数を記入するだけでいいです.
iitem:各レコードのフィールドを定義する
# -*- coding:utf-8 -*-

from scrapy.item import Item, Field

class CsdnblogItem(Item):
    """          """
    article_name = Field()
    article_url = Field()

pipeline:結果がどこに存在するか、どのコードに格納されるかを定義します.
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