scrapy框架

SCRAPY爬虫框架入门

爬取中国天气网的一个小demo

  1. 建立框架

    scrapy startproject  myspider[project_name]
    

    看一下项目的结构目录

    scrapy.cfg: 项目的配置文件

    hellospider/: 该项目的python模块。之后您将在此加入代码。

    hellospider/items.py:需要提取的数据结构定义文件。

    hellospider/middlewares.py: 是和Scrapy的请求/响应处理相关联的框架。

    hellospider/pipelines.py: 用来对items里面提取的数据做进一步处理,如保存等。

    hellospider/settings.py: 项目的配置文件。

    hellospider/spiders/: 放置spider代码的目录。

  2. 在items.py中定义自己要抓取的数据

    import scrapy
    
    
    class HellospiderItem(scrapy.Item):
        # 天气
        weather = scrapy.Field()
        # 最高温度
        temperature_up = scrapy.Field()
        # 最低温度
        temperature_low = scrapy.Field()
        # 风力
        wind = scrapy.Field()
        pass
    
    

    【注】上面类中的title、author、reply就像是字典中的“键”,爬到的数据就像似字典中的“值”。

  3. 在spiders目录下创建爬虫文件myspider.py

    import scrapy
    from ..items import HellospiderItem
    import sys
    
    
    class MySpider(scrapy.Spider):
        # 设置名称
        name = 'myspider'
        start_urls = [
            'http://www.weather.com.cn/weather/101010100.shtml',
        ]
    
        # 爬取方法
        def parse(self, response):
            for i in response.xpath('//*[@id="7d"]/ul/li[1]'):
                item = HellospiderItem()
                item['weather'] = i.xpath('//*[@id="7d"]/ul/li[1]/p[1]/text()').extract()
                item['temperature_up'] = i.xpath('//*[@id="7d"]/ul/li[1]/p[2]/span/text()').extract()
                item['temperature_low'] = i.xpath('//*[@id="7d"]/ul/li[1]/p[2]/i/text()').extract()
                item['wind'] = i.xpath('//*[@id="7d"]/ul/li[1]/p[3]/i/text()').extract()
                yield item
    
    

    这里注意一点爬虫文件中指定的name需要与文件名同名,不然在启动时会检测不到这个爬虫

    xpath语法可参考:http://www.w3school.com.cn/xpath/xpath_syntax.asp

  4. 在pipelines.py中保存数据

    import json
    
    
    class HellospiderPipeline:
        def __init__(self):
            # 打开文件
            self.file = open('../jtianqi.json', 'w', encoding='utf-8')
    
        def process_item(self, item, spider):
            # item 爬虫返回来的数据,写入文件中
            lines = json.dumps(dict(item), ensure_ascii=False) + "\n"
            self.file.write(lines)
            return item
        def close_spider(self, spider):
            # 关闭文件
            self.file.close()
    
    
  5. settings.py

    打开这个注释,多个爬虫下,后边的数值代表优先级,数字越小优先级越高

    ITEM_PIPELINES = {
       'hellospider.pipelines.HellospiderPipeline': 300,
    }
    
  6. 执行爬虫

    cd到项目目录下,执行命令scrapy crawl [SpidersFile_name]

    D:\python\python8\scrapy>scrapy crawl myspider
    

    爬取到的数据

    {'temperature_low': ['25℃'],
     'temperature_up': ['35'],
     'weather': ['晴'],
     'wind': ['3-4级转<3级']}
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值