爬虫-Scrapy框架

一:介绍

1:scrapy介绍

Scrapy一个开源和协做的框架,其最初是为了页面抓取 (更确切来讲, 网络抓取 )所设计的,使用它能够以快速、简单、可扩展的方式从网站中提取所需的数据。但目前Scrapy的用途十分普遍,可用于如数据挖掘、监测和自动化测试等领域,也能够应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。html

所谓的框架就是一个已经被集成了各类功能(高性能异步下载,队列,分布式,解析,持久化等)的具备很强通用性的项目模板。对于框架的学习,重点是要学习其框架的特性、各个功能的用法便可。python

二:安装

1:安装

Linux:

      pip3 install scrapy
 
Windows:
      a. pip3 install wheel
      b. 下载twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
      c. 进入下载目录,执行 pip3 install Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whl
      d. pip3 install pywin32
      e. pip3 install scrapy

 

  出现上面的证实安装完成了ajax

2:scrapy命令行工具

#1 查看帮助
    scrapy -h
    scrapy <command> -h

#2 有两种命令:其中Project-only必须切到项目文件夹下才能执行,而Global的命令则不须要
    Global commands:
        startproject #建立项目
        genspider    #建立爬虫程序
        settings     #若是是在项目目录下,则获得的是该项目的配置
        runspider    #运行一个独立的python文件,没必要建立项目
        shell        #scrapy shell url地址  在交互式调试,如选择器规则正确与否
        fetch        #独立于程单纯地爬取一个页面,能够拿到请求头
        view         #下载完毕后直接弹出浏览器,以此能够分辨出哪些数据是ajax请求
        version      #scrapy version 查看scrapy的版本,scrapy version -v查看scrapy依赖库的版本
    Project-only commands:
        crawl        #运行爬虫,必须建立项目才行,确保配置文件中ROBOTSTXT_OBEY = False
        check        #检测项目中有无语法错误
        list         #列出项目中所包含的爬虫名
        edit         #编辑器,通常不用
        parse        #scrapy parse url地址 --callback 回调函数  #以此能够验证咱们的回调函数是否正确
        bench        #scrapy bentch压力测试

#3 官网连接
    https://docs.scrapy.org/en/latest/topics/commands.html

 

 

 

三:scrapy项目建立以及项目结构

1:项目运行相关命令 

#一、执行全局命令:请确保不在某个项目的目录下,排除受该项目配置的影响
scrapy startproject MyProject #建立项目

------------------------------------------------- cd MyProject scrapy genspider baidu www.baidu.com
#建立爬虫文件baidu
scrapy genspider 应用名称 爬取网页的起始url 

-------------------------------------------------------- scrapy settings
--get XXX #若是切换到项目目录下,看到的则是该项目的配置 scrapy runspider baidu.py scrapy shell https://www.baidu.com response response.status response.body view(response) scrapy view https://www.taobao.com #若是页面显示内容不全,不全的内容则是ajax请求实现的,以此快速定位问题 scrapy fetch --nolog --headers https://www.taobao.com scrapy version #scrapy的版本 scrapy version -v #依赖库的版本 #二、执行项目命令:切到项目目录下 scrapy crawl baidu #执行baidu爬虫文件
scrapy crawl  应用名称 --nolog #执行爬虫程序,不显示日志
scrapy check scrapy list scrapy parse http:
//quotes.toscrape.com/ --callback parse scrapy bench

 2:项目目录结构

project_name/
   scrapy.cfg:
   project_name/
       __init__.py
       items.py
       pipelines.py
       settings.py
       spiders/
           __init__.py

scrapy.cfg   项目的主配置信息。(真正爬虫相关的配置信息在settings.py文件中)
items.py     设置数据存储模板,用于结构化数据,如:Django的Model
pipelines    数据持久化处理
settings.py  配置文件,如:递归的层数、并发数,延迟下载等,强调:配置文件的选项必须大写不然视为无效,正确写法USER_AGENT='xxxx'
spiders      爬虫目录,如:建立文件,编写爬虫解析规则

 注意:通常建立爬虫文件时,以网站域名命名shell

四:基础使用

1:案例模板

1.1建立项目:

  scrapy startproject 项目名称浏览器

1.2建立爬虫应用程序:

      cd project_name(进入项目目录)bash

      scrapy genspider 应用名称 爬取网页的起始url (例如:scrapy genspider qiubai www.qiushibaike.com)网络

1.3编写爬虫文件:

  在步骤2执行完毕后,会在项目的spiders中生成一个应用名的py爬虫文件,文件源码以下:并发

 

import scrapy

class QiubaiSpider(scrapy.Spider):
    name = 'qiubai' #应用名称
    #容许爬取的域名(若是遇到非该域名的url则爬取不到数据)
    allowed_domains = ['https://www.qiushibaike.com/']
    #起始爬取的url
    start_urls = ['https://www.qiushibaike.com/']

     #访问起始URL并获取结果后的回调函数(解析数据),该函数的response参数就是向起始的url发送请求后,获取的响应对象.该函数返回值必须为可迭代对象或者NUll 
     def parse(self, response):
        print(response.text) #获取字符串类型的响应内容
        print(response.body)#获取字节类型的相应内容

 

1.4设置修改settings.py配置文件相关配置:

修改内容及其结果以下:
19行:USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36' #假装请求载体身份

22行:ROBOTSTXT_OBEY = False  #能够忽略或者不遵照robots协议

  

1.5执行爬虫程序:

  scrapy crawl  应用名称app

相关文章
相关标签/搜索