学习简单的使用scrapy 抓取 新浪天气 写入文件

创建项目文件

scrapy startproject tutorial

复制的官网说明

  • scrapy.cfg: 项目的配置文件
  • tutorial/: 该项目的python模块。之后您将在此加入代码。
  • tutorial/items.py: 项目中的item文件.
  • tutorial/pipelines.py: 项目中的pipelines文件.
  • tutorial/settings.py: 项目的设置文件.
  • tutorial/spiders/: 放置spider代码的目录.

我新建的项目为pider,目录结构如图

其中spiders 是我项目的代码 文件

scrapy.cfg 是项目的配置文件

items.py 是需要提取的 数据结构 的定义文件

pipelines.py 是管道定义,用来对items 里面的数据进一步处,保存写入文件等

settings.py 是爬虫配置文件(将来对管道文件的调取也在这里配置)

1.定义items

import scrapy

class PiderItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    day = scrapy.Field() #day
    temp = scrapy.Field() #温度
    wind = scrapy.Field() #风速
    pass

2. 实现spiders代码

start_urls:一个url列表,spider从这些网页开始抓取

parse():一个方法,当start_urls里面的网页抓取下来之后需要调用这个方法解析网页内容,同时需要返回下一个需要抓取的网页,或者返回items列表

 

from pider.items import *
import scrapy
from scrapy import Selector
from scrapy.selector import Selector

class DmozSpider(scrapy.spiders.Spider):
    name = "dmoz"
    allowed_domains = ["dmoz.org"]
    start_urls = [
        "http://weather.sina.com.cn/",
    ]

    def parse(self, response):
        content = Selector(response);
        days = content.css('p.wt_fc_c0_i_date::text').extract()
        temps = content.css('p.wt_fc_c0_i_temp::text').extract();
        winds = content.css('p.wt_fc_c0_i_tip::text').extract();
        items = []
        for day in days:
            item = PiderItem()
            item['day'] = day;
            items.append(item)

        for temp in temps:
            item = PiderItem()
            item['temp'] = temp;
            items.append(item)
        for wind in winds:
            item = PiderItem()
            item['wind'] = wind;
            items.append(item)
        return items;

要使用items 需要引入   from pider.items import *

3. pipelines  是实现对items的数据结构的进一步操作,如保存

import json
class PiderPipeline(object):


    def __init__(self):
        self.file = open('items.json', 'w+')


    def process_item(self, item, spider):
        line = json.dumps(dict(item)) + "\n"
        self.file.write(line)
        return item

 

然后执行 scrapy crawl dmoz 就可以把数据写入文件中了

 

要把是数据写入文件,需要调用pipelines ,我们可以在settings.py设置如下,要不不能写入文件

ITEM_PIPELINES = {
    'pider.pipelines.PiderPipeline': 300,
}

 

我也是看着文档试着写了下程序,很多地方不很明白,要慢慢的弄,还是要多看文档和各位大神的代码。

 

posted @ 2016-10-26 23:31  爱骑行的哈士奇  阅读(125)  评论(0)    收藏  举报