Python爬虫之Scrapy框架结构

Scrapy项目结构

scrapy.cfg
myproject/
    __init__.py
    items.py
    pipelines.py
    settings.py
    spiders/
        __init__.py
        spider1.py
        spider2.py
        ...

文件介绍:
  • scrapy.cfg:项目的配置文件
  • myproject/:项目的Python模块,将会从这里引用代码
  • myproject/items.py:项目的目标文件
  • myproject/pipelines.py:项目的管道文件
  • myproject/settings:项目的设置文件
  • myproject/spiders/:存储爬虫代码目录

项目步骤

一、明确目标

  1. 打开items.py文件
  2. items中定义结构化数据字段,用来保存爬取到的数据,有点像Python中的dict,提供了一些额外的保护减少错误
  3. 可以通过创建一个scrapy.Item类,并且定义类型为scrapy.Field的类属性来定义一个Item
  4. 接下来,创建一个自定义Item子类,和构建item模型

例如:

import scrapy

class BeautyItem(scrapy.Item):
    name = scrapy.Field()
    age = scrapy.Field()
    img = scrapy.Field()

二、制作爬虫

  • 在当前目录下输入命令
scrapy genspider spider_name "allowed_domains"

  将在myproject/spiders/目录下创建一个名为‘spider_name‘的爬虫文件,并制定爬虫域的范围(allowed_domains,用于限定爬取的数据来源不超过这个域名范围)

  • 打开该目录下的spider_name.py文件,默认增加了下列代码:
import scrapy

class Spider_name(scrapy.Spider):

    name = "spider_name"
    allowed_domains = ["allowed_domains"]
    start_urls = [‘http://www.allowed_domains‘]

    def parse(self, response):
        pass

  其实也可以由我们自行创建爬虫文件并编写上面的代码,只不过使用命令可以免去编写固定代码的麻烦

  要创建一个Spider,你必须用scrapy.Spider类创建一个子类,并确定了两个强制的属性和一个方法

  • name = "" :爬虫的识别名称,必须是唯一的,不同的爬虫必须定义不同的名称
  • allowed_domains = [] :是搜索的域名范围,也就是爬虫的约束区域,规定爬虫只爬取这个域名下的网页,不存在的URL会被忽略(非必要属性)
  • start_urls = [] :爬取的url列表。爬虫从这里开始爬取数据,所以第一此下载的数据将会从这些urls开始,其他子URL将会从起始URL继承性生成
  • parse(self, response) :解析的方法,每个初始URL完成下载后将被调用,调用的时候传入从每一个URL传回的Response对象来作为唯一参数,主要作用如下:
  1. 负责解析返回的网页数据(response.body),提取结构化数据(生成item)
  2. 生成需要下一页的URL请求

保存数据

scrapy保存信息的最简单的方法主要有四种,-o输出指定格式的文件,命令如下:

# json格式
scrapy crawl spider_name -o file_name.json

# json line格式
scrapy crawl spider_name -o file_name.jsonl

# csv逗号表达式,可用excel打开
scrapy crawl spider_name -o file_name.csv

# xml格式
scrapy crawl spider_name -o file_name.xml

Item Pipelines

当Item在Spider中被收集之后,它将会被传递到Item Pipeline,这些Item Pipeline组件按定义的顺序处理Item。

每个Item Pipeline都是实现了简单方法的Python类,比如决定此Item是丢弃还是存储。以下是Item Pipeline的一些典型应用:

  • 验证爬取的数据(检查item包含某些字段,比方说name字段)
  • 查重(并丢弃)
  • 将爬取结果保存到文件或数据库中

  

编写Item pipeline很简单,item pipeline组件是一个独立的Python类,其中process_item()方法必须实现

import something

class somethingPipeline(Object):

    def __init__(self):
        # 可选实现,做参数初始化(如打开保存目录文件)等
        # do something

    def process_item(self, item, spider):
        # item(Item对象) - 被爬取的item
        # spider(Spider对象) - 爬取该item的spider
        # 这个方法必须实现,每个item pipeline组件都需要调用该方法
        # 必须返回一个Item对象,被丢弃的item将不会被之后的pipeline组件锁处理
        return item

    def open_spider(self, spider):
        # spider(Spider对象) - 被开启的spider
        # 可选实现,当spider被开启时被调用

    def close_spider(self, spider):
        # spider(spider对象) - 被关闭的spider
        # 可选实现,当spider被关闭时被调用
时间: 2024-12-29 12:39:07

Python爬虫之Scrapy框架结构的相关文章

教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

欢迎加入Python学习交流群:535993938  禁止闲聊 ! 名额有限 ! 非喜勿进 ! 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http://www.xiaohuar.com/,让你体验爬取校花的成就感. Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. Scrapy吸引人的地方在于

【转载】教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

原文:教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http://www.xiaohuar.com/,让你体验爬取校花的成就感. Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. Scrapy吸引人的地方在于它是一个框架,任何人都可

Python爬虫框架Scrapy教程(1)—入门

最近实验室的项目中有一个需求是这样的,需要爬取若干个(数目不小)网站发布的文章元数据(标题.时间.正文等).问题是这些网站都很老旧和小众,当然也不可能遵守 Microdata这类标准.这时候所有网页共用一套默认规则无法保证正确抓取到信息,而每个网页写一份spider代码也不切实际. 这时候,我迫切地希望能有一个框架可以通过只写一份spider代码和维护多个网站的爬取规则,就能自动抓取这些网站的信息,很庆幸 Scrapy 可以做到这点.鉴于国内外关于这方面资料太少,所以我将这段时间来的经验和代码分

Linux 安装python爬虫框架 scrapy

Linux 安装python爬虫框架 scrapy http://scrapy.org/ Scrapy是python最好用的一个爬虫框架.要求: python2.7.x. 1. Ubuntu14.04 1.1 测试是否已经安装pip # pip --version 如果没有pip,安装: # sudo apt-get install python-pip 1.2 然后安装scrapy Import the GPG key used to sign Scrapy packages into APT

精通Python爬虫从Scrapy到移动应用(文末福利)

我能够听到人们的尖叫声:"Appery.io是什么,一个手机应用的专用平台,它和Scrapy有什么关系?"那么,眼见为实吧.你可能还会对几年前在Excel电子表格上给某个人(朋友.管理者或者客户)展示数据时的场景印象深刻.不过现如今,除非你的听众都十分老练,否则他们的期望很可能会有所不同.在接下来的几页里,你将看到一个简单的手机应用,这是一个只需几次单击就能够创建出来的最小可视化产品,其目的是向利益相关者传达抽取所得数据的力量,并回到生态系统中,以源网站网络流量的形式展示它能够带来的价

教你分分钟学会用python爬虫框架Scrapy爬取你想要的内容

教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 python爬虫学习课程,下载地址:https://pan.baidu.com/s/1v6ik6YKhmqrqTCICmuceug 课程代码原件:课程视频: 原文地址:http://blog.51cto.com/aino007/2123341

分享《精通Python爬虫框架Scrapy》中文PDF+英文PDF+源代码

下载:https://pan.baidu.com/s/13tFIFOhDM8PG9pFUuA8M2g 更多分享资料:https://www.cnblogs.com/javapythonstudy/ <精通Python爬虫框架Scrapy>中文PDF+英文PDF+源代码 中文版PDF,364页,带目录和书签,文字可以复制粘贴,彩色配图:英文版PDF,270页,带目录和书签,文字可以复制粘贴,彩色配图:中英文两版对比学习.配套源代码. 其中,中文版如图: 原文地址:https://www.cnbl

分享《精通Python爬虫框架Scrapy》+PDF+源码+迪米特里奥斯+李斌

下载:https://pan.baidu.com/s/1-ruuQebCnyLVt5L8RATT-g 更多资料:http://blog.51cto.com/14087171 <精通Python爬虫框架Scrapy>中文PDF+英文PDF+源代码 中文版PDF,364页,带目录和书签,文字可以复制粘贴,彩色配图:英文版PDF,270页,带目录和书签,文字可以复制粘贴,彩色配图:中英文两版对比学习.配套源代码. 其中,中文版如图: 原文地址:http://blog.51cto.com/140871

Learning Scrapy:《精通Python爬虫框架Scrapy》Windows环境搭建

之前用爬虫抓点数据的时候基本上就是urllib3+BeautifulSoup4,后来又加入requests,大部分情况就够用了.但是最近心血来潮想学一下Scrapy,于是找了本书——<精通Python爬虫框架Scrapy>.内容算是比较可以的,但是按书中附录搭建环境着实折腾了一点时间,于是想把碰到的问题总结一下,让大家也少走点弯路. 进入正题之前,有几点要说明一下: 安装这个环境有什么用?这个环境就是一个服务器,有需要你抓的网站,不会因现实中的网站改版而造成代码失效,书中测试代码的网站基本上都