Scrapy 入门 - Part 1

创建项目

利用scrapy命令行创建一个名为“tutorial”的项目

scrapy startproject tutorial

生成的目录格式为

tutorial/
    scrapy.cfg #项目配置文件
    tutorial/
        __init__.py
        items.py
        pipelines.py
        settings.py
        spiders/ #放置spider代码的目录.
            __init__.py
            ...

定义Item

Item是保存爬取到的内容的容器,就像是Python中的dict
类似在ORM中做的一样,可以通过创建一个 scrapy.Item 类, 并且定义类型为 scrapy.Field 的类属性来定义一个Item。

Sample of /tutorial/items.py

import scrapy
import time

#LianjiaItem继承自scrapy.Item
class LianjiaItem(scrapy.Item):

    #所有想要爬取的字段都是scrapy.Field类型
    _id = scrapy.Field()
    title = scrapy.Field()
    acreage = scrapy.Field()
    cityCode = scrapy.Field()
    districtName = scrapy.Field()
    face = scrapy.Field()
    floor_state = scrapy.Field()
    houseSellId = scrapy.Field()
    latitude = scrapy.Field()
    longitude = scrapy.Field()
    hall = scrapy.Field()
    metroRemark =  scrapy.Field()
    plateName = scrapy.Field()
    propertyName = scrapy.Field()
    referAvgPrice = scrapy.Field()
    room = scrapy.Field()
    showPrice = scrapy.Field()
    unitPrice = scrapy.Field()
    title = scrapy.Field()
    tags = scrapy.Field()
    crawl_date = scrapy.Field()

编写爬虫(Spider)

为了创建一个Spider,必须继承 scrapy.Spider 类, 且定义以下三个属性:

  • name: 用于区别Spider。 该名字必须是唯一的,不可以为不同的Spider设定相同的名字。
  • start_urls: 包含了Spider在启动时进行爬取的url列表。 因此,第一个被获取到的页面将是其中之一。 后续的URL则从初始的URL获取到的数据中提取。
  • parse()
    是spider的一个方法。 被调用时,每个初始URL完成下载后生成的 Response 对象将会作为唯一的参数传递给该函数。 该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的 Request
    对象。

Sample of Spider.py

import scrapy

class LianjiaSpider(scrapy.spiders.Spider):
    name = "lianjia_spider"
    allowed_domains = ["lianjia.com"]
    start_urls = ["http://bj.lianjia.com/fangjia/" ]

    def parse(self, response):
        filename = response.url.split("/")[-2]
        with open(filename, 'wb') as f:
            f.write(response.body)

Scrapy为Spider的 start_urls 属性中的每个URL创建了 scrapy.Request 对象,并将 parse
方法作为回调函数(callback)赋值给了Request。
Request对象经过调度,执行生成 scrapy.http.Response 对象并送回给spider parse() 方法。

你可能感兴趣的:(Scrapy 入门 - Part 1)