day11 ~ scrapy初识

文章目录

  • @[toc]
    • 1.scrapy安装与环境依赖
    • 2.创建项目
    • 3.项目目录介绍
    • 4.scrapy框架介绍: 5大核心组件与数据流向
    • 6.scrapy爬取校花网人名与图片下载链接

1.scrapy安装与环境依赖

# 1.在安装scrapy前需要安装好相应的依赖库, 再安装scrapy, 具体安装步骤如下:(1).安装lxml库: pip install lxml(2).安装wheel: pip install wheel(3).安装twisted: pip install twisted文件路径(twisted需下载后本地安装,下载地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted)(版本选择如下图,版本后面有解释,请根据自己实际选择)(4).安装pywin32: pip install pywin32(注意:以上安装步骤一定要确保每一步安装都成功,没有报错信息,如有报错自行百度解决)(5).安装scrapy: pip install scrapy(注意:以上安装步骤一定要确保每一步安装都成功,没有报错信息,如有报错自行百度解决)(6).成功验证:在cmd命令行输入scrapy,显示Scrapy1.6.0-no active project,证明安装成功


2.创建项目

1.手动创建一个目录test
2.在test文件夹下创建爬虫项目为spiderpro: scrapy startproject spiderpro
3.进入项目文件夹: cd spiderpro
4.创建爬虫文件: scrapy genspider 爬虫名 域名

3.项目目录介绍

spiderprospiderpro # 项目目录__init__spiders:爬虫文件目录__init__tests.py:爬虫文件items.py:定义爬取数据持久化的数据结构middlewares.py:定义中间件pipelines.py:管道,持久化存储相关settings.py:配置文件venv:虚拟环境目录scrapy.cfg: scrapy项目配置文件

说明:
  (1).spiders:其内包含一个个Spider的实现, 每个Spider是一个单独的文件
  (2).items.py:它定义了Item数据结构, 爬取到的数据存储为哪些字段
  (3).pipelines.py:它定义Item Pipeline的实现
  (4).settings.py:项目的全局配置
  (5).middlewares.py:定义中间件, 包括爬虫中间件和下载中间件
  (6).scrapy.cfg:它是scrapy项目的配置文件, 其内定义了项目的配置路径, 部署相关的信息等


4.scrapy框架介绍: 5大核心组件与数据流向

(1).架构:Scrapy Engine: 这是引擎,负责Spiders、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等等!Scheduler(调度器): 它负责接受引擎发送过来的requests请求,并按照一定的方式进行整理排列,入队、并等待Scrapy Engine(引擎)来请求时,交给引擎。Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spiders来处理,Spiders:它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),Item Pipeline:它负责处理Spiders中获取到的Item,并进行处理,比如去重,持久化存储(存数据库,写入文件,总之就是保存数据用的)Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件Spider Middlewares(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spiders中间‘通信‘的功能组件(比如进入Spiders的Responses;和从Spiders出去的Requests)
(2).工作流:1.spider将请求发送给引擎, 引擎将request发送给调度器进行请求调度2.调度器把接下来要请求的request发送给引擎, 引擎传递给下载器, 中间会途径下载中间件3.下载携带request访问服务器, 并将爬取内容response返回给引擎, 引擎将response返回给spider4.spider将response传递给自己的parse进行数据解析处理及构建item一系列的工作, 最后将item返回给引擎, 引擎传递个pipeline5.pipe获取到item后进行数据持久化6.以上过程不断循环直至爬虫程序终止

5.使用scrapy框架爬取糗百

# 需求: 爬取糗事百科热门板块,每一条的标题,好笑,评论条数及作者信息,解析爬取的信息数据,定制item数据存储结构,最终将数据存储于MongoDB数据库中.
# 创建项目:
scrapy startproject qsbk # 创建项目
cd qsbk # 切换到项目目录
scrapy genspider qsbk_hot www.qiushibaike.com # 创建爬虫文件, qsbk_hot为爬虫名, www...com为爬取范围
# item文件定义数据存储的字段:
import scrapy
class QsbkItem(scrapy.Item):title = scrapy.Field()  # 标题lau = scrapy.Field()  # 好笑数comment = scrapy.Field()  # 评论数auth = scrapy.Field()  # 作者
# spider文件中定义解析数据的方法
class QsbkHotSpider(scrapy.Spider):name ='qsbk_hot'# allowed_domains = ['www.qiushibaike.com'] # 无用, 可注释掉start_urls =['http://www.qiushibaike.com/']# 思路:一条热点数据在前端中对应一个li标签, 将一页中的所有li标签取出, 再进一步操作def parse(self, response):li_list = response.selector.xpath('//div[@class="recommend-article"]/ul/li')# 循环li标签组成的列表, 先实例化item, 再取需要的字段, 并该item对象的相应属性赋值for li in li_list:# 实例化item对象item =QsbkItem()# 解析获取title(标题), lau(好笑数), comment(评论数), auth(作者)等信息title = li.xpath('./div[@class="recmd-right"]/a/text()').extract_first()lau = li.xpath('./div[@class="recmd-right"]/div[@class="recmd-detail clearfix"]/div/span[1]/text()').extract_first()comment = li.xpath('./div[@class="recmd-right"]/div[@class="recmd-detail clearfix"]/div/span[4]/text()').extract_first()auth = li.xpath('./div[@class="recmd-right"]/div[@class="recmd-detail clearfix"]/a/span/text()').extract_first()# 因为部分热点数据还没有评论和好笑数, 所以需对数据进行处理if not lau:lau =Noneif not comment:comment =None# 将字段的值存储在item的属性中item["title"]= titleitem["lau"]= lauitem["comment"]= commentitem["auth"]= auth# 返回item, 框架会自动将item传送至pipeline中的指定类yield item
# 在pipeline中定义管道类进行数据的存储
import pymongoclassQsbkPipeline(object):# 连接MongoDB数据库conn = pymongo.MongoClient("localhost", 27017)db = conn.qiubaitable = db.qb_hotdef process_item(self, item, spider):# 向数据库中出入数据self.table.insert(dict(item))# 此处return item是为了下一个管道类能够接收到item进行存储return itemdef close_spider(self):# 关闭数据库连接self.conn.close()
# 此示例中配置文件中的配置的项, 注意是不是全部的配置, 是针对该项目增加或修改的配置项# 忽略robots协议
ROBOTSTXT_OBEY =False# UA伪装
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36'# 管道类的注册配置
ITEM_PIPELINES ={
'qsbk.pipelines.QsbkPipeline':300,
}

6.scrapy爬取校花网人名与图片下载链接

# 需求: 爬取校花网大学校花的默认的第一页的所有图片src和人名, 并通过管道存入mongodb数据库
# 创建项目:
scrapy startproject xiaohuaspider # 创建项目
cd xiaohuaspider # 切换到项目目录
scrapy genspider hua www.baidu.com # 创建爬虫文件, hua为爬虫名, www.baidu.com为爬取范围
# 创建item类, 用于存储解析出的数据
import scrapy
class XiaohuaspiderItem(scrapy.Item):name = scrapy.Field()src = scrapy.Field()
# spider中定义爬取的行为与解析数据的操作
import scrapy
from ..items import XiaohuaspiderItemclass HuaSpider(scrapy.Spider):name = 'hua'# allowed_domains = ['www.baidu.com']start_urls = ['http://www.xiaohuar.com/hua/']def parse(self, response):div_list = response.xpath('//div[@class="img"]')for div in div_list:item = XiaohuaspiderItem()name = div.xpath('.//span/text()').extract_first()src = div.xpath('./a/img/@src').extract_first()item["name"] = nameitem["src"] = srcyield item
# itemPipeline编码, 持久化数据到本地
import pymongoclass XiaohuaspiderPipeline(object):conn = pymongo.MongoClient('localhost', 27017)db = conn.xiaohuatable = db.huadef process_item(self, item, spider):self.table.insert(dict(item))return itemdef close_spider(self, spider):self.conn.close()
# 配置项:
# UA伪装:
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36'# 忽略robots协议:
ROBOTSTXT_OBEY = False# 开启管道类
ITEM_PIPELINES = {'xiaohuaspider.pipelines.XiaohuaspiderPipeline': 300,
}

scrapy开始初始下载相关推荐

  1. 使用scrapy图片管道下载图片

    前言 Scrapy是Python语言下一个十分流行的爬虫框架,本文不对Scrapy本身做详细介绍.有关Scrapy的安装可以参考官网的安装指南,不过本人更推荐使用Anaconda,Anaconda集成 ...

  2. Python爬虫—Scrapy框架—Win10下载安装

    Python爬虫-Scrapy框架-Win10下载安装 1. 下载wheel 2.下载twisted 3. 下载pywin32 4. 下载安装Scrapy 5. 创建一个scrapy项目 6. fir ...

  3. Python爬虫之Scrapy库的下载和安装

    Python爬虫之Scrapy库的下载和安装 下载scrapy库 1.点击https://www.lfd.uci.edu/~gohlke/pythonlibs,进入该网页后Ctrl+F输入scrapy ...

  4. Python3爬虫之Scrapy框架的下载器中间件

    Python爬虫之Scrapy框架的下载器中间件 基本介绍 下载器中间键可以为我们设置多个代理ip与请求头,达到反反爬虫的目的 下面是scrapy为我们创建好的中间件的类 下面是中间件中的下载器函数, ...

  5. 简单的scrapy爬取下载小说

    一.scrapy简介 scrapy结构 items.py:用来存放爬虫爬取下来数据的模型 middlewares.py:用来存放各种中间件的文件 pipelines.py:用来将items的模型存储到 ...

  6. scrapy中的下载器中间件

    下载中间件 下载器中间件是介于Scrapy的request/response处理的钩子框架. 是用于全局修改Scrapy request和response的一个轻量.底层的系统. 编写下载器中间件 1 ...

  7. Scrapy图片自动下载配置

    在setting.py中配置基本信息 IMAGES_URLS_FIELD = "front_image_url" # 获取当前文件路径 project_dir = os.path. ...

  8. python scrapy 使用ImagePipeline下载图片

    在scrapy中,为了爬取图片,可以将要爬取的图片的url放在image_urls字段中,在item从spider返回时,ImagePipeline会自动高优先级抓取这些url,于此同时,item会被 ...

  9. scrapy框架之下载中间件

    介绍 中间件是Scrapy里面的一个核心概念.使用中间件可以在爬虫的请求发起之前或者请求返回之后对数据进行定制化修改,从而开发出适应不同情况的爬虫. "中间件"这个中文名字和前面章 ...

最新文章

  1. 软件测试(20150819)
  2. Unsupervised Personalized Feature Selection--阅读笔记
  3. 华宇输入法linux,华宇拼音输入法DEB版能切换为五笔输入法,附操作方法
  4. Jmeter之Bean shell使用(一)
  5. 5-5 表格输出 (5分)
  6. 项目实战丨某高校校园网络升级改造方案
  7. javascript   卸载事件(onunload)
  8. mysql 1054 42s22_MySQL ERROR 1054(42S22)
  9. 当按下ESC键时,关闭应用程序
  10. python接口自动化(十八)--重定向(Location)(详解)
  11. 5G手机产业链将带动多少A股上市公司?
  12. 设置TOMCAT TITLE 、 内存大小 、jdk路径
  13. Android 退出登陆后,清空之前所有的activity,进入登陆主界面
  14. abort()和exit()的区别
  15. 君正X1000芯片软件开发手册
  16. centos minimal安装基础流程
  17. 罗伯塔·威廉姆斯(roberta williams)是世界上第一位图形计算机游戏设计师,但她以...
  18. Python dict_values取第一个值
  19. ytht bbs 安装手册
  20. 微信开挂怎么防止封号_说我微信开挂怎么解决(做好这几点不封号)

热门文章

  1. 帝国cms更新php,帝国CMS自动刷新首页的方法
  2. R语言中is.na()
  3. 基于java springboot扫码点餐小程序源码(毕设)
  4. signature=54cb1c123491dc1a268a21f3502cccfc,汉隶《曹全碑》精讲精练
  5. 十大排序算法代码集锦(java)
  6. 采用DotAsterisk(点星PBX)系统组建跨地区总公司和分公司之间的免费VoIP电话呼叫
  7. jpa Specification fetch查询报错,query specified join fetching, but the owner of the fetched association
  8. 使用 Power Query 制作工资条
  9. 大型在线实时应用解决方案
  10. python中的matplotlib用法