当前位置: 首页 > news >正文

高端网站策划公司网站建设服务费的税率

高端网站策划公司,网站建设服务费的税率,html设计软件,建设英文网站要求爬虫进阶-scrapy01 Scrapy框架 学习目标 理解Scrapy框架的基本概念和优缺点 掌握Scrapy框架的架构和工作流程 安装和配置Scrapy框架 创建和管理Scrapy项目、制作爬虫、运行爬虫和调试、数据存储 实战:爬取某招聘网站信息 前言 随着网络爬虫应用越来越多&…

爬虫进阶-scrapy01

Scrapy框架

学习目标

  1. 理解Scrapy框架的基本概念和优缺点

  2. 掌握Scrapy框架的架构和工作流程

  3. 安装和配置Scrapy框架

  4. 创建和管理Scrapy项目、制作爬虫、运行爬虫和调试、数据存储

  5. 实战:爬取某招聘网站信息


前言

随着网络爬虫应用越来越多,互联网中涌现了一些网络爬虫框架,这些框架将网络爬虫的一些常用功能和业务逻辑进行了封装。在这些框架的基础上,只需要按照需求添加少量代码,就可实现一个网络爬虫。Scrapy是目前流行的Python网络爬虫框架之一,能帮助开发人员高效地开发网络爬虫程序。

回顾之前的爬虫流程

上面的流程可以改写为:

1. 什么是Scrapy

Scrapy是一个纯使用Python语言开发、开源的网络爬虫框架,用于抓取网站页面,并从页面中提取结构化数据。Scrapy最初是为了页面抓取而设计的,可以简单、快速地从网站页面中提取所需的数据,如今Scrapy具备更加广泛的用途,可以被应用到诸如数据挖掘、数据监测、自动化测试等领域以及通用网络爬虫中。Scrapy 0.24 文档 — Scrapy 0.24.6 文档

是基于Twisted框架开发的,Twisted是一个流行的基于事件驱动的网络引擎框架,采用了异步代码实现并发功能。Twisted负责处理网络通信,这样不仅加快页面的下载速度,而且减少手动实现异步操作。

2. Scrapy框架优点

Scrapy框架功能如此强大,离不开其自身具备的如下几个优点:

  • 具有丰富的文档、良好的社区以及庞大的用户群体。

  • Scrapy支持并发功能,可以灵活地调整并发线程的数量。

  • 采用可读性很强的XPath技术解析网页,解析速度更加快速。

  • 具有统一的时间件,可以对数据进行过滤。

  • 支持Shell工具,方便开发人员独立调试程序。

  • 通过管道将数据存入数据库,灵活方便,且可以保存为多种形式。

  • 具有高度的可定制化功能,经过简单改造后,便可以实现具有特定功能的网络爬虫。

3. Scrapy框架缺点

虽然Scrapy框架功能强大,但自身仍存在几个缺点:

  • 自身无法实现分布式爬虫。

  • 去重效果差,极易消耗内存。

  • 无法获取采用JavaScript技术进行动态渲染的页面内容。

为弥补Scrapy框架这些缺点,产生了许多框架插件进行解决,如Scrapy-Redis库解决了Scrapy框架不支持分布式爬虫的问题,Scrapy-Splash库解决了Scrapy框架不支持JavaScript动态渲染的问题等。

4. Scrapy框架架构

Scrapy框架的强大功能,离不开众多组件的支撑,这些组件相互协作,共同完成整个采集数据的任务。 Scrapy框架的架构图如下图所示:

4.1 其流程可以描述如下:

  1. 爬虫中起始的url构造成request对象-->爬虫中间件-->引擎-->调度器

  2. 调度器把request-->引擎-->下载中间件-->下载器

  3. 下载器发送请求,获取response响应-->下载中间件-->引擎-->爬虫中间件-->爬虫

  4. 爬虫提取url地址,组装成request对象-->爬虫中间件-->引擎-->调度器,重复步骤2

  5. 爬虫提取数据-->引擎-->管道处理和保存数据

  • 注意:

    • 图中中文是为了方便理解后加上去的

    • 图中绿色线条的表示数据的传递

      • 注意图中中间件的位置,决定了其作用

    • 注意其中引擎的位置,所有的模块之前相互独立,只和引擎进行交互

4.2 scrapy的三个内置对象

  • request请求对象:由url method post_data headers等构成

  • response响应对象:由url body status headers等构成

  • item数据对象:本质是个字典

4.3 scrapy中每个模块的具体作用

  • Scrapy Engine(引擎):总指挥,负责数据和信号的在不同模块间的传递

  • Scheduler (调度器):一个队列,存放引擎发过来的request请求(scrapy已实现)

  • Downloader (下载器):下载把引擎发过来的request请求,并返回给引擎(scrapy已实现)

  • Spider (爬虫):处理引擎发来的response,提取数据,提取url,并交给引擎(需要手写)

  • Item Pipeline(管道):处理引擎传过来的数据,比如存储(需要手写)

  • Downloader Middlewares(下载中间件):可以自定义的下载扩展,比如设置代理(一般不用手写)

  • Spider Middlewares(爬虫中间件):可以自定义request请求和进行response过滤(一般不用手写)

注意:

  • 爬虫中间件和下载中间件只是运行逻辑的位置不同,作用是重复的:如替换UA等

小结

  1. scrapy的概念:Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用程序

  2. scrapy框架的运行流程以及数据传递过程:

    • 爬虫中起始的url构造成request对象->爬虫中间件->引擎->调度器

    • 调度器把request->引擎->下载中间件->下载器

    • 下载器发送请求,获取response响应->下载中间件->引擎->爬虫中间件->爬虫

    • 爬虫提取url地址,组装成request对象->爬虫中间件->引擎->调度器,重复步骤2

    • 爬虫提取数据->引擎->管道处理和保存数据

  3. scrapy框架的作用:通过少量代码实现快速抓取

  4. 掌握scrapy中每个模块的作用:

    • 引擎(engine):负责数据和信号在不同模块间的传递

    • 调度器(scheduler):实现一个队列,存放引擎发过来的request请求对象

    • 下载器(downloader):发送引擎发过来的request请求,获取响应,并将响应交给引擎

    • 爬虫(spider):处理引擎发过来的response,提取数据,提取url,并交给引擎

    • 管道(pipeline):处理引擎传递过来的数据,比如存储

    • 下载中间件(downloader middleware):可以自定义的下载扩展,比如设置代理IP

    • 爬虫中间件(spider middleware):可以自定义request请求和进行response过滤,与下载中间件作用重复

5. Scrapy框架安装

由于Windows系统默认没有安装Python,所以在安装Scrapy框架之前,需要保证Windows系统下已经安装了Python。

在命令提示符窗口中使用pip工具安装Scrapy框架。

pip install scrapy

在Windows系统下安装Scrapy框架常见的两个问题是缺少Microsoft Visual C++ 14.0组件和Twisted安装出错。

缺少Microsoft Visual C++ 14.0组件,报如下错误:

error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools

需要注意的是,在Visual Studio 2015组件安装完成之后需要重新启动计算机。

Twisted安装出错,报如下错误:

fatal error c1083: Cannot open include file: 'basetsd.h': No such file or directory
error: command 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\c1.exe' failed with exit status 2

在Twisted下载页面中选择适合自己电脑的安装包进行安装。

安装命令如下:

pip install Twisted-20.3.0-cp36-cp36m-win_amd64.whl

5.1 创建Scrapy项目

新建Scrapy项目是使用Scrapy框架的第一步,将前面提到的各个组件整合到一起后,方便进行统一管理。

新建Scrapy项目需要使用如下命令:

scrapy startproject 项目名称

例如,使用创建爬虫项目创建mySpider爬虫项目。

管理员:C:\Windows\system32\cmd.exe
​
E:\PythonProject>scrapy startproject mySpider
New Scrapy project 'mySpider', using template directory 'c:\programdata\anaconda3\lib\site-packages\scrapy\templates\project', created in:E:\PythonProject\mySpider
​
You can start your first spider with:cd mySpiderscrapy genspider example example.com
​
E:\PythonProject>

mySpider项目的目录结构如下所示。

mySpider/scrapy.cfgmySpider/__init__.pyitems.pymiddlewares.pypipelines.pysettings.pyspiders/__init__.py...
  • mySpider/: 项目的Python模块,将会从这里引用代码。

  • mySpider/spiders/: 存放爬虫代码的目录。

  • mySpider/items.py: 项目的实体文件,用于定义项目的目标实体。

  • mySpider/middlewares.py: 项目的中间件文件,用于定义爬虫中间件。

  • mySpider/pipelines.py: 项目的管道文件,用于定义项目使用的管道。

  • mySpider/settings.py: 项目的设置文件,用于存储项目的设置信息。

  • scrapy.cfg: 配置文件,用于存储项目的配置信息。

5.2 制作爬虫

制作爬虫的流程一般可以分为3步,分别是创建爬虫、抓取网页数据和解析网页数据。

创建爬虫

创建爬虫是为爬虫起一个名称,并规定该爬虫的爬取域,也就是要爬取的域名范围。

scrapy genspider 爬虫名称 "爬取域"

例如,在命令行窗口中切换当前的目录为子目录mySpider/spiders,创建一个名称为baidu、爬取域为baidu.com的爬虫。

在PyCharm中打开mySpider/spiders目录,可以看到新创建的baidu.py,该文件的内容已经自动生成。

import scrapy
​
# 继承 scrapy.Spider
class BaiduSpider(scrapy.Spider):# 爬虫名称name = "baidu"# 允许的域 相当于过滤操作allowed_domains = ["baidu.com"]# 起始开始的urlstart_urls = ["https://www.baidu.com"]def parse(self, response):# 定义对于网站的操作 response是响应返回的数据# 如果出现DEBUG: Forbidden by robots.txt: <GET http://www.baidu.com># 说明百度网站的 robots.txt 禁止了大多数爬虫访问# Scrapy 默认设置 ROBOTSTXT_OBEY = True 的规则,因此自动屏蔽了对百度的请求。# 修改settings.py# ROBOTSTXT_OBEY = False  # 关闭 robots.txt 规则检查
​with open('baidu.html', 'wb') as f:f.write(response.body)

BaiduSpider是自动生成的类,它继承自scrapy.Spider类。

其中:

  • name属性:爬虫名称。爬虫名称必须是唯一的,不同爬虫需要有不同名称。

  • allowed_domains属性:爬虫搜索的域名范围。该属性用于规定,爬虫只能抓取指定域名范围内的网页,忽略不属于该域名范围内的网页。

  • start_urls属性:包含起始URL的元组或列表,指定爬虫首次从哪个网页开始抓取。

  • parse(self, response)方法:用于解析网页数据(response.body),返回抽取的数据或者新生成的要跟进的URL。该方法会在每个初始URL完成下载后被调用,被调用时传入从该URL返回的Response对象作为唯一参数。

抓取网页数据

确定了初始化URL之后就可以运行爬虫,让爬虫根据该URL抓取网页数据了。运行爬虫的命令格式如下:

scrapy crawl 爬虫名称

例如,在命令行窗口中切换当前目录为baidu.py文件所在的目录,运行爬虫baidu,命令如下:

scrapy crawl baidu

http://www.dtcms.com/a/400133.html

相关文章:

  • SpringBoot从0-1集成Graalvm
  • 代理商加盟网站网站建设阿里云搭建个人网站
  • 网站建设哪家学校好网络营销有哪些岗位
  • 网站建设为什么学flash开个免费的网站多少钱
  • 上海网站开发建设找哪家网页升级跳转自动刷新
  • 大良网站建设网推渠道
  • 盐城网站开发如何什么 的提升自己的网站
  • 网站建设进度表 下载课程网站开发背景和意义
  • 合肥哪家做网站好都江堰seo
  • ArrayList重点APi
  • 度假村网站建设wordpress 登陆失败
  • 购物网站建设新闻无锡谁做网站好
  • 胶南网站建设价格网站申请内容吗
  • 用wordpress建的大部app优化网站建设
  • 一篇文章讲清楚常见的数据结构
  • 如何做二级域名子目录网站广州app搭建
  • 数据结构 之 【并查集】
  • 可视化小程序开发工具深圳网站优化排名公司
  • 网站建设带采集威海建设集团的网站是什么
  • 【愚公系列】《人工智能70年》038-计算机视觉大放异彩(计算机视觉未来)
  • 网站建设公司douyanet桂林北京网站建设
  • 开通域名后怎样建设网站苏州做网站哪家比较好
  • 考研408计算机网络第47题(2024年)
  • 什么网站可以找到防水工程做建站行业成为买方市场
  • 装修公司网站模板下载最优惠的网站优化
  • Nginx 配置指南:HTTPS 自签名、Location、Rewrite 与状态统计
  • chn域名网站百度知道登录入口
  • 网站做cpa推广引流苍南具城乡建设局网站
  • 工商网站官网入口做国际网站的流程
  • 广告网站素材青创网站首页