zoukankan      html  css  js  c++  java
  • python scrapy

    scrapy的安装 pip install Scrapy

    scrapy 常用命令

    scrapy提供了两种类型的命令。一种必须在Scrapy项目中运行,是针对项目的命令;另外一种则不需要,属于全局命令

    全局命令:

    startproject  用法 scrapy startproject <project_name>。用于在project_name文件夹下创建一个名为project_name的Scrapy项目   实例scrapy startproject  myproject

    settings    用法 scrapy settings [options] 在项目中运行时,该命令将会输出项目的设定值,否则输出Scrapy默认设定,示例如下 scrapy settings --get BOT_NAME,scrapy setting --get DOWLOAD_DELAY

    runspider  scrapy runspider <spider_file.py> 在未创建项目的情况下,运行一个编写好的spider模块。示例如下 scrapy runspider cnblogs_spider.py

    shell       scrapy shell [url] 用来启动Scrapy shell,url为可选 示例如  scrapy shell  http://www.cnblogs.com/paulversion/

    fetch     scrapy fetch <url> 使用Scrapy下载器(downloader)下载给定的URL,并将获取到的内容送到标准输出。该命令以spider下载页面的方式获取页面,如果在项目中运行,fetch将会使用项目中spider的属性访问。如果在非项目中运行,则会使用默认Scrapy dowmloader设定

    示例如下:

    scrapy fetch --nolog "http://www.cnblogs.com/paulversion/"

    scrapy fetch --nolog --headers  "http://www.cnblogs.com/paulversion/"

    view   scrapy view<url> 在浏览器中打开给定的URL,并以scrapy spider 获取到的形式展现。scrapy view  "http://www.cnblogs.com/paulversion/"

    version   scrapy version [-] 输出scrapy 版本

    bench   scrapy bench 用于benchmark 测试,测试scrapy在硬件上的效率。

    项目命令:

    crawl    scrapy crawl <spider> 用来使用spider进行爬取 示例如下 scrapy crawl cnblogs

    check   scrapy check [-l] <spider>  运行contract检查,示例如下:scrapy check -l

    list      scrapy list  列出当前项目中所有可用的spider,每行输出一个spider

    edit    scrapy edit <spider> 使用设定的编辑器编辑给定的spider。该命令仅仅是提供一个快捷方式,开发者可以自由选择其他工具或者IDE来编写调试spider   scrapy edit cnblogs

    parse   scrapy parse <url> [options]  获取给定的URL并使用相应的spider分析处理。如果提供--callback选项

    genspider  scrapy genspider[-t template]<name><domain>。可以在当前项目中创建spider。

    deploy  scrapy deploy [<target:projet>|-l<target>|-L] 将项目部署到Scrapyd服务

    定义Item

    将爬取的数据以结构化的方式保存。scrapy提供Item类来满足这样的需求。在使用scrapy新建的项目中,有一个item.py文件,用来定义存储数据的Item类。这个类需要继承scrapy.Item

    代码如下

    # -*- coding: utf-8 -*-

    # Define here the models for your scraped items
    #
    # See documentation in:
    # https://doc.scrapy.org/en/latest/topics/items.html

    import scrapy

    #定义item
    class CnblogspiderItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    url = scrapy.Field()
    time = scrapy.Field()
    title = scrapy.Field()
    #content = scrapy.Field()

    创建  CnblogspiderItem对象

    item =  CnblogspiderItem(title="Python爬虫",content='爬虫开发')

    获取字段的值

    print item['title']

    print item['conetent']

    设置字段的值

    item['title'] = 'paulversion'

    获取所有的key或值

    item.keys() 获取所有的键 item.items()获取所有的值

    item 复制

    item2 = CnblogspiderItem(item)

    item3 = item.copy()

    dict与item的转化

    dict_item = dict(item)

    item = CnblogspiderItem({'title':'爬虫','content':'开发'}) 

    翻页

    翻页的功能的实现,本质上是构造Request并提交给Scrapy引擎的过程

    # coding:utf-8
    import scrapy
    from cnblogSpider.items import CnblogspiderItem
    from scrapy import Selector
    class CnblogsSpider(scrapy.Spider):
    name = 'cnblogs' # 爬虫的名称
    allowed_domains = ["cnblogs.com"] # 允许的域名
    start_urls = [

    'http://www.cnblogs.com/qiyeboy/default.html?page=1'
    ]

    # 网页解析地址
    def parse(self, response):
    # 实现网页的解析
    # 首先抽取所有的文章

    papers = response.xpath(".//*[@class='day']")
    # 从每篇文章中抽取数据

    for paper in papers:
    url = paper.xpath(".//*[@class='postTitle']/a/@href").extract()[0]
    title = paper.xpath(".//*[@class='postTitle']/a/text()").extract()[0]
    time = paper.xpath(".//*[@class='dayTitle']/a/text()").extract()[0]
    content = paper.xpath(".//*[@class='postCon']/div/text()").extract()[0]
    item = CnblogspiderItem(url=url, title=title, time=time)
    yield item

    next_page = Selector(response).re(u'<a href = "(S*)">下一页</a>')
    if next_page:
    yield scrapy.Request(url=next_page[0], callback=self.parse)#实现翻页的功能

    构建Item Pipeline

    当Item在Spider中被收集之后,它将会被传递到Item Pipeline

    Item Pipeline 主要有以下典型应用:

    1:清理HTML数据

    2:验证爬取的数据的合法性,检查Item是否包含某些字段

    3:查重并丢弃

    4:将爬取结果保存到文件或者数据库中

    每次创建一个项目在项目的pipelines.py文件 代码如下

    # -*- coding: utf-8 -*-

    # Define your item pipelines here
    #
    # Don't forget to add your pipeline to the ITEM_PIPELINES setting
    # See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
    import json
    from scrapy.exceptions import DropItem
    class CnblogspiderPipeline(object):

    def __init__(self):
    self.file = open('paper.json', 'wb')

    def process_item(self, item, spider):
    if item['title']:
    line = json.dumps(dict(item)) + " "
    self.file.write(line)
    return item
    else:
    raise DropItem("Missing title in %s" %item)

  • 相关阅读:
    [软件工程基础]第 1 次个人作业
    [软件工程基础]个人项目 数独
    [2017BUAA软件工程]第0次个人作业
    [2017BUAA软工]第零次作业
    NoSQL-流式数据处理与Spark
    C、JAVA存储管理不同点
    数据库之一窥数据库系统
    Java单元测试-覆盖率分析报告自动生成
    Java单元测试-快速上手Junit(进阶)
    Java单元测试-快速上手Junit
  • 原文地址:https://www.cnblogs.com/paulversion/p/8405894.html
Copyright © 2011-2022 走看看