学习简单的使用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, }
我也是看着文档试着写了下程序,很多地方不很明白,要慢慢的弄,还是要多看文档和各位大神的代码。

浙公网安备 33010602011771号