Scrapy爬虫框架

安装 : pip install scrapy

测试成功 : scrapy -h

Scrapy爬虫框架“5+2”结构:


Scrapy主要组件:

  • 引擎(Engine)

用来控制所有模块之间的数据流, 触发事务(框架核心)

  • 下载器(Downloader)

用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)

  • 爬虫(Spiders)

解析Downloader返回的响应(Response);产生爬取项(scrapy item);产生额外的爬取请求(Request)

  • 项目管道(Item Pipeline)

负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送 到项目管道,并经过几个特定的次序(流水线)处理数据。

  • 下载器中间件(Downloader Middlewares)

位于引擎和下载器之间的框架,主要是处理引擎与下载器之间的请求及响应,丢弃、修改、新增。

  • 调度中间件(Scheduler Middewares)

介于引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应。

  • 爬虫中间件(Spider Middlewares)

介于引擎和爬虫之间的框架,主要工作是处理蜘蛛的响应输入和请求输出。

  • 调度器(Scheduler)

用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址

Request vs Scrapy


Request Scrapy                                                    
页面级爬虫                                 网站级爬虫
功能库                                                    框架
并发性考虑不足 并发性好,性能高
重点在于页面下载 重点在于爬虫结构
定制灵活 一般定制灵活,深度定制困难
上手简单 入门稍难

Scrapy运行流程:

  1. 引擎从调度器中取出一个链接(URL)用于接下来的抓取
  2. 引擎把URL封装成一个请求(Request)传给下载器
  3. 下载器把资源下载下来,并封装成应答包(Response)
  4. 爬虫解析Response
  5. 解析出实体(Item),则交给实体管道进行进一步的处理
  6. 解析出的是链接(URL),则把URL交给调度器等待抓取

Scrapy使用形式:命令行

查看所有命令

scrapy -h

查看帮助信息

scapy --help

查看版本信息

scrapy version             #Scrapy 1.1.2
scrapy version -v
Scrapy       : 1.5.0
lxml         : 4.1.1.0
libxml2      : 2.9.5
cssselect    : 1.0.3
parsel       : 1.3.1
w3lib        : 1.18.0
Twisted      : 17.9.0
Python       : 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC v.1500 32 bit (Intel)]
pyOpenSSL    : 17.5.0 (OpenSSL 1.1.0g  2 Nov 2017)
cryptography : 2.1.4
Platform     : Windows-10-10.0.14393

完整配置并实现Scrapy爬虫的过程:

  1. 建立工程和Spider模板
  2. 编写Spider
  3. 编写Pipeline
  4. 配置优化

Scrapy爬虫的数据类型:

  • Request类:
1、cless scrapy.http.Request();
2、request对象表示一个HTTP请求;
3、由Spider生成,由Downloader执行
  • Response类
1、cless scrapy.http.Response();
2、response对象表示一个HTTP请求;
3、由Downloader生成,由Spider处理
  • Item类
1、cless scrapy.item.Item();
2、item对象表示从HTML页面中提取的信息内容;
3、由Spider生成,由Item Pipeline处理
4、可以按照字典类型操作;

Scrapy爬虫支持的HTML信息提取方法:

  1. Beautiful Soup
  2. lxml
  3. re
  4. XPath Selector
  5. CSS Selector
>>>response.css('xxx')

yield关键字的使用:

Iterables

当你创建一个list,你可以一个一个的获取,这种列表就称为迭代:

 mylist = [1, 2, 3]for i in mylist:print(i)      #1 2 3

mylist 是一个迭代器. 当你理解它为一个list,它便是可迭代的:

 mylist = [x*x for x in range(3)]for i in mylist:print(i)  #0 1 4

任何可以用 for ..in.. 来迭代读取的都是迭代容器,如lists,strings,files.需要存储所有的值,其中很多值没有必要每次都保持在内存中。

Generators

Generators(生成器)是可迭代的,每次只能迭代一次,因为不是所有的迭代器都被一直存储在内存中的:

 mygenerator = (x*x for x in range(3))for i in mygenerator:print(i)   #0 1 4  生成0然后丢弃,继续统计1,接着是4;

Yield

Yield返回一个生成器,例如:

 def createGenerator():mylist = range(3)for i in mylist:yield i*imygenerator = createGenerator()        # 创建generatorprint(mygenerator)       # mygenerator 是一个对象! 输出<generator object createGenerator at 0xb7555c34>for i in mygenerator:print(i)             #0 1 4

当调用creatGenerator

的时候,这个函数中的代码并没有真正运行。它仅仅返回一个生成器对象,

代码会在每次for使用生成器的时候跑起来。

练习案例:

入门篇:美剧天堂前100最新(http://www.meijutt.com/new100.html)

1、创建工程

1
scrapy startproject movie

2、创建爬虫程序

1
2
cd movie
scrapy genspider meiju meijutt.com   #生成meiju.py----

3、自动创建目录及文件

4、文件说明:

  • _init_.py  初始化脚本
  • scrapy.cfg  项目的配置信息,主要为Scrapy命令行工具提供一个基础的配置信息。(真正爬虫相关的配置信息在settings.py文件中)
  • items.py    设置数据存储模板,用于结构化数据,如:Django的Model
  • pipelines.py   Pipelines代码模板(继承类),数据处理行为,如:一般结构化的数据持久化
  • middlewares.py  Middlewares代码模板(继承类)
  • settings.py  Scrapy的配置文件,如:递归的层数、并发数,延迟下载等
  • spiders      爬虫目录,如:创建文件,编写爬虫规则

注意:一般创建爬虫文件时,以网站域名命名。

5、设置数据存储模板

  items.py

1
2
3
4
5
6
import scrapy
class MovieItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    name = scrapy.Field()

6、编写爬虫

  meiju.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# -*- coding: utf-8 -*-
import scrapy
from movie.items import MovieItem
class MeijuSpider(scrapy.Spider):               #继承scrapy.spider
    name = "meiju"          
    allowed_domains = ["meijutt.com"]                    #最开始用户提交给命令行的域名,只能爬取该域名以下的内容
    start_urls = ['http://www.meijutt.com/new100.html']       #要爬取的初始页面
    def parse(self, response):   #解析页面方法:用于处理响应,解析内容形成字典,发现新的URL爬取请求
        movies = response.xpath('//ul[@class="top-list  fn-clear"]/li')
        for each_movie in movies:
            item = MovieItem()
            item['name'] = each_movie.xpath('./h5/a/@title').extract()[0]
            yield item

7、设置配置文件

  settings.py增加如下内容

1
ITEM_PIPELINES = {'movie.pipelines.MoviePipeline':100}

8、编写数据处理脚本

  pipelines.py

1
2
3
4
class MoviePipeline(object):
    def process_item(self, item, spider):
        with open("my_meiju.txt",'a'as fp:
            fp.write(item['name'].encode("utf8") + '\n')

9、执行爬虫

1
2
cd movie
scrapy crawl meiju --nolog

10、结果显示

Python网络爬虫《九》相关推荐

  1. 爬虫书籍-Python网络爬虫权威指南OCR库 NLTK 数据清洗 BeautifulSoup Lambda表达式 Scrapy 马尔可夫模型

    Python网络爬虫权威指南 编辑推荐 适读人群 :需要抓取Web 数据的相关软件开发人员和研究人员 作为一种采集和理解网络上海量信息的方式,网页抓取技术变得越来越重要.而编写简单的自动化程序(网络爬 ...

  2. python网络爬虫_Python网络爬虫——爬取视频网站源视频!

    原标题:Python网络爬虫--爬取视频网站源视频! 学习前提 1.了解python基础语法 2.了解re.selenium.BeautifulSoup.os.requests等python第三方库 ...

  3. 《精通Python网络爬虫:核心技术、框架与项目实战》——1.3 网络爬虫的组成...

    本节书摘来自华章出版社<精通Python网络爬虫:核心技术.框架与项目实战>一书中的第1章,第1.3节,作者 韦 玮,更多章节内容可以访问云栖社区"华章计算机"公众号查 ...

  4. python商业爬虫教程_廖雪峰老师的Python商业爬虫课程 Python网络爬虫实战教程 体会不一样的Python爬虫课程...

    廖雪峰老师的Python商业爬虫课程 Python网络爬虫实战教程 体会不一样的Python爬虫课程 1.JPG (53.51 KB, 下载次数: 1) 2019-8-9 08:15 上传 2.JPG ...

  5. python爬虫教程视频下载-利用Python网络爬虫获取电影天堂视频下载链接【详细教程】...

    相信大家都有一种头疼的体验,要下载电影特别费劲,对吧?要一部一部的下载,而且不能直观的知道最近电影更新的状态. 今天以电影天堂为例,带大家更直观的去看自己喜欢的电影,并且下载下来. [二.项目准备] ...

  6. python网络爬虫权威指南 百度云-分析《Python网络爬虫权威指南第2版》PDF及代码...

    对那些没有学过编程的人来说,计算机编程看着就像变魔术.如果编程是魔术(magic),那么网页抓取(Web scraping)就是巫术(wizardry),也就是运用"魔术"来实现精 ...

  7. python爬虫文件代码大全-Python网络爬虫实战项目代码大全(长期更新,欢迎补充)...

    WechatSogou[1]- 微信公众号爬虫.基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典.[1]: https://github ...

  8. 精通python网络爬虫-精通python网络爬虫

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 作者:韦玮 转载请注明出处 随着大数据时代的到来,人们对数据资源的需求越来越多, ...

  9. python爬虫程序-Python网络爬虫实战(一)快速入门

    本系列从零开始阐述如何编写Python网络爬虫,以及网络爬虫中容易遇到的问题,比如具有反爬,加密的网站,还有爬虫拿不到数据,以及登录验证等问题,会伴随大量网站的爬虫实战来进行. 我们编写网络爬虫最主要 ...

  10. 精通python网络爬虫-精通Python网络爬虫 PDF 高清版

    给大家带来的一篇关于Python爬虫相关的电子书资源,介绍了关于Python.网络爬虫.核心技术.框架.项目实战方面的内容,本书是由机械工业出版社出版,格式为PDF,资源大小108.6 MB,韦玮编写 ...

最新文章

  1. 企业选择数据中心的建议
  2. 小程序云服务器选什么系统好,小程序云服务器操作系统选择
  3. iOS之深入解析少见却神奇的NSProxy类的多种使用
  4. python 进行一元线性回归并输出相关结果_Python实现一元线性回归实战
  5. 内核编译(make)
  6. 实践单元测试(2) - 大话单元测试
  7. centos7的网络配置
  8. Java集合--LinkedList
  9. linux下u盘的使用
  10. python判断英文字母_python判断字符串是否包含字母
  11. C | 扫雷游戏完整版
  12. 【笔记】74HC573的一些记录
  13. java集合中取最大值_Java后台通过Collections获取list集合中最大数,最小数代码
  14. 浅谈大数据专业的就业前景
  15. 关于软件界面设计、控件颜色搭配、一些实用建议(偷懒技巧)总结——针对C# WinForm/WPF技术
  16. 雷柏 V500PRO Win键失效
  17. 《晚风》 带来阵阵清凉
  18. 利用Python进行数据分析的学习笔记——chap6
  19. 在C语言中各种数据类型各占多少位 C语言 中结构体的位域(位段)
  20. 现代控制理论1——前期理论体系

热门文章

  1. 阿里巴巴集团CTO张建锋:将开放阿里的技术能力
  2. 青春校园小说:天使会爱上恶魔【完】『看了绝对上瘾』(欢迎转载)
  3. 硕飞烧录器、卓晶微烧录机使用
  4. 【Multisim】模拟电子技术综合设计实验:正弦波、方波、三角波信号发生器的设计与搭建
  5. FreeSurfer和FSL的安装和使用(脑部图像去除头骨+对图像和label同时进行仿射对齐)教程
  6. CORDIC实现FPGA复数求模(Xilinx CORDIC IP 6.0)
  7. java复数类求模_用java定义一个复数类Complex,能够创建复数对象,并且实现复数之间的加、减运算 用java编写一个复数类...
  8. spring boot引入JDK的jar,Jenkins自动化部署出错
  9. ambiguous column name 错误
  10. 利用Python进行博客图片压缩