第三篇:爬虫框架 - Scrapy

前言

Python提供了一个比较实用的爬虫框架 - Scrapy。在这个框架下只要定制好指定的几个模块,就能实现一个爬虫。

本文将讲解Scrapy框架的基本体系结构,以及使用这个框架定制爬虫的具体步骤。

Scrapy体系结构

其具体执行流程如下:

1. 任务管理器Scheduler将初始下载任务递交给下载器Downloader;
       2. 下载器Downloader将下载好了的页面传递给爬取分析器Spiders进行分析。

爬取分析器分析的结果分为两种:

a) 本次爬取所得数据 -> 它将传递给任务管理器Scheduler;
       b) 需要进行下一级爬取的URL地址 -> 它将传递给数据管道进行相关的保存工作。

基于Scrapy框架的豆瓣网电影信息爬取器

1. 执行以下命令创建一个新的工程:

1 scrapy startproject doubanMovieSpider

doubanMovieSpider是工程名,工程包里将会有如下这些文件:

1) scrapy.cfg: 项目配置文件
2) items.py: 需要提取的数据结构定义文件
3) pipelines.py:管道定义,用来对items里面提取的数据做进一步处理,如保存等
4) settings.py: 爬虫配置文件
5) spiders: 放置spider的目录

该工程用于从豆瓣网爬取电影信息(如电影名,评分等等)。

2. 定义爬取结果数据结构Item --- 在items.py中编写如下代码:

 1 # -*- coding: utf-8 -*-
 2 # ================================================
 3 #  作者: 方萌
 4 #  创建时间: 20**/**/**
 5 #  版本号: 1.0
 6 #  联系方式: [email protected]
 7 # ================================================
 8 # scrapy框架模块
 9 import scrapy
10 class DoubanmoviespiderItem(scrapy.Item):
11     # 主题
12     title = scrapy.Field()
13     # 评分
14     rate = scrapy.Field()
15     # ID
16     id = scrapy.Field()

Item其实从本质来说,就是Scrapy框架自己实现的字典,需要继承scrapy.Item类。上述代码定义的字典表示要爬取的电影信息有:电影主题,电影评分,以及电影ID。

3. 实现爬取分析器Spider --- 在spiders目录下增加一个python文件MovieSpider.py:

在这个文件中自定义一个爬取分析器,该分析器为一个继承自scrapy.spider.BaseSpider(或者Scrapy框架下其他抽象爬取器)的类,它起码要实现以下几个字段:

1) name:spider的标识
2) start_urls:起始爬取URL
3) parse():爬取对象解析函数

实现代码如下:

 1 # -*- coding: utf-8 -*-
 2 # ================================================
 3 #  作者: 方萌
 4 #  创建时间: 20**/**/**
 5 #  版本号: 1.0
 6 #  联系方式: [email protected]
 7 # ================================================
 8 # scrapy框架模块
 9 import scrapy
10 # json解析模块
11 import json
12 # 系统模块
13 import sys
14 # items模块
15 import doubanMovieSpider.items
16 # 爬虫类
17 class MovieSpider(scrapy.spider.BaseSpider):
18     # 爬虫名
19     name = "douban"
20     # 域名限定
21     allowed_domains = ["www.douban.com"]
22     # 爬取URL队列
23     start_urls = [
24         "http://movie.douban.com/j/serch_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=200&page_start=0"
25     ]
26     def parse(self, response):
27         """
28             函数功能:
29                 解析爬取到的数据
30             输入:
31                 response -> 爬取返回数据对象
32             输出:
33                 空
34         """
35         # 将爬取到的电影信息存入json容器
36         json_container = json.loads(response.body)
37         # 构建items。该模块具体含义请查询相关文档。
38         items = []
39         for movie_elem in json_container[‘subjects‘]:
40             item = doubanMovieSpider.items.DoubanmoviespiderItem()
41             for key in movie_elem:
42                 if key == ‘title‘:
43                     item[‘title‘] = movie_elem[key]
44                     print movie_elem[key]
45                 if key == ‘rate‘:
46                     item[‘rate‘] = movie_elem[key]
47                 if key == ‘id‘:
48                     item[‘id‘] = movie_elem[key]
49                     items.append(item)
50         # 返回items
51         return items

4. 实现PipeLine --- 修改items.py文件:

 1 # -*- coding: utf-8 -*-
 2 # Define your item pipelines here
 3 #
 4 # Don‘t forget to add your pipeline to the ITEM_PIPELINES setting
 5 # See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
 6 class DoubanmoviespiderPipeline(object):
 7     def __init__(self):
 8         pass
 9     def process_item(self, item, spider):
10         pass

PipeLine用来对Spider返回的Item列表进行保存操作,可以写入到文件、或者数据库等。

我们可以在其中的__init__方法内编写打开文件部分代码,在process_item方法内编写具体的写入函数(可直接将数据写入进远程数据库);也可以不实现这个模块,scrapy会有其默认的写入机制(本系统采用默认写入机制)

5. 在项目当前目录下执行如下命令即可启动此爬虫系统:

1 scrapy crawl douban -o items.json -t json

该命令表示启动爬取分析器“douban”,并将爬取到的items以json格式保存到items.json文件中。“douban” 即是在爬取分析器中由name域指定的。

下图为爬取到的结果:

小结

本文仅仅给出Scrapy框架的基本使用。如果要实现生产级别的项目,还需对该框架内的一些具体设置,各种抽象爬取分析器进行深入研究。

时间: 2024-10-11 21:55:05

第三篇:爬虫框架 - Scrapy的相关文章

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

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

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

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

小白学 Python 爬虫(40):爬虫框架 Scrapy 入门基础(七)对接 Selenium 实战

人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Linux基础入门 小白学 Python 爬虫(4):前置准备(三)Docker基础入门 小白学 Python 爬虫(5):前置准备(四)数据库基础 小白学 Python 爬虫(6):前置准备(五)爬虫框架的安装 小白学 Python 爬虫(7):HTTP 基础 小白学 Python 爬虫(8):网页基

爬虫框架Scrapy

前面十章爬虫笔记陆陆续续记录了一些简单的Python爬虫知识, 用来解决简单的贴吧下载,绩点运算自然不在话下. 不过要想批量下载大量的内容,比如知乎的所有的问答,那便显得游刃不有余了点. 于是乎,爬虫框架Scrapy就这样出场了! Scrapy = Scrach+Python,Scrach这个单词是抓取的意思, 暂且可以叫它:小抓抓吧. 小抓抓的官网地址:点我点我. 那么下面来简单的演示一下小抓抓Scrapy的安装流程. 具体流程参照:官网教程 友情提醒:一定要按照Python的版本下载,要不然

小白学 Python 爬虫(37):爬虫框架 Scrapy 入门基础(五) Spider Middleware

人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Linux基础入门 小白学 Python 爬虫(4):前置准备(三)Docker基础入门 小白学 Python 爬虫(5):前置准备(四)数据库基础 小白学 Python 爬虫(6):前置准备(五)爬虫框架的安装 小白学 Python 爬虫(7):HTTP 基础 小白学 Python 爬虫(8):网页基

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

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

怎么在32位windows系统上搭建爬虫框架scrapy?

禁止转载: 自学python,然后搭建爬虫框架scrapy.费了我一上午的心血.终于搭建成功,以防以后忘记搭建流程,特此撰写此贴,开写 *************************************************************************************************************** 首先安装python,我安装的是python2.7.12,安装在F:\python2.7.12,资源自行下载.由于在安装python的时候,

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

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