Scrapy爬虫框架入门

1、强烈推荐的Scrapy框架教程:http://blog.csdn.net/column/details/younghz-scrapy.html

2、框架说明:

2.1:

                                      Scrapy爬虫框架入门_第1张图片

整理框架中,初学者只需要参与的就是Spiders和item Pipeline模块

各模块的作用:

Spider 模块:解析网页和发送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)) + '\n'
        self.file.write(line.decode("unicode_escape"))

        return item




你可能感兴趣的:(爬虫,python)