美文网首页
Scrapy 入门 - Part 1

Scrapy 入门 - Part 1

作者: 渡笃狼 | 来源:发表于2017-08-08 00:29 被阅读11次

    创建项目

    利用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

          本文链接:https://www.haomeiwen.com/subject/ziqalxtx.html