3.爬虫之Scrapy框架的安装与使用

2023-11-18

1. Scrapy框架

1.1 介绍

Scrapy是一个开源和协作框架, 可以用于数据挖掘, 监测, 自动化测试, 获取API所有返回的数据或网络爬虫.
Scrapy是基于twisted框架开发的, twisted是一个流行的事件驱动的python网络框架, 
使用非阻塞(异步)代码实现并发.

1.2 框架图

1.3 执行流程

* 1. 爬虫(SPIDERS)中包装成requests对象给引擎(ENGINE).
     SPIDERS(爬虫) 只要用于解析数据与发送请求(可以有多个请求).
* 2. 引擎接受到requests对象, 转发到调度器(SCHEDULER).
* 3. 调度器(SCHEDULER)是一个队列(深度优先爬取, 广度优先爬取), 请求排队在经过处理, 返回到调度器中.
* 4. 调度器(SCHEDULER)经过中间件转发到下载器(DOWNLOADER), 下载器中在发送request请求.
* 5. 下载器中得到response响应, 在经过中间件到引擎.
* 6. 引擎得到response经过中间件转发到爬虫解析数据(解析结果是一个网址或数据).
* 7. 爬虫进过中间见转发到引擎
* 8. 引擎判断接受的requesrs对象则再次重复上面步骤, 如果是ITEMS则转发到项目管道(ITEM PIPELINES),
	项目管道中对数据进行存储(一个文件可以保存到不同的位置).

1.4 五大组件

五大组件:
1. 引擎: 负责控制数据的流向
2. 调度器: 决定下一个要抓取的网址(集合去重)
3. 下载器: 下载网页内容, 并将网页内容返回到引擎. 下载器是建立在twisted高效的异步模型上.
4. 爬虫: 开发人员自定义的类, 用来解析response, 并且提取items, 获取再次发送requests.
5. 项目管道: 在items被提取后负责处理它们, 主要包括清理, 验证, 持久化操作(写入到数据库).

1.5 两大中间件

两大中间件:
1. 爬虫中间件: 位于爬虫与引擎之间, 只要工作室处理爬虫的输入requests和输出.(使用少)
2. 下载中间件: 位于引擎与下载器之间, 加代理头, 加头, 集成selenium.(使用多)

开发者只需要在固定的地方写固定的代码即可.

2. Scrapy安装与基本的使用

2.1 安装

* 在cmd命令窗口执行
命令: pip install scrapy

image-20220720145838112

在windows上可能会出错.
    1. pip3 install wheel 
    # 安装后, 便支持通过wheel文件安装软件
    wheel文件官网:https://www.lfd.uci.edu/~gohlke/pythonlibs
    2. pip3 install lxml
    3. pip3 install pyopenssl
    4. 下载twisted的wheel文件:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
    5. 执行pip3 install 下载目录\Twisted...
    6. pip3 install pywin32
    7. pip3 install scrapy
    8. 测试scrapy命令安装,终端中输入: scrapy  
       * 如果不行在前面加上 py -m
       在cmd命令窗口下安装会将scrapy添加到环境变量,
       在PyCharm的Terminl下安装则不会将scrapy添加到环境变量, 需要添加py -m, 开头.

2.2 创建Scrapy项目

* 1. 创建项目命令: scrapy startproject 项目名 存放路径
PS P:\synchro\Project\pc3> scrapy startproject fisetscrapy P:\synchro\Project
New Scrapy project 'fisetscrapy', using template directory 'd:\python files\python38\lib\site-packages\scrapy\templates\project', created in:
    P:\synchro\Project

You can start your first spider with:
    cd P:\synchro\Project
    scrapy genspider example example.com

* 2. 使用pycharm打开爬虫项目

2022-07-09_201905

* 3. 创建爬虫程序: scrapy genspider 爬虫名 爬取地址(https://可以省略)
     在spiders目录下多出一个爬虫名.py的文件
PS P:\synchro\Project\pc3> scrapy genspider chouti https://dig.chouti.com/
Created spider 'chouti' using template 'basic' in module:
  fisetscrapy.spiders.chouti

PS P:\synchro\Project\fisetscrapy> scrapy genspider baidu www.baidu.com
Spider 'baidu' already exists in module:
  fisetscrapy.spiders.baidu

2022-07-09_201947

2.3 项目目录介绍

fisetscrapy                           项目名
    |--fisetscrapy                    项目包
            |--spiders                爬虫脚本包
                |--__init__.py
                |--chouti.py          自建爬虫脚本
                |--baidu.py           自建爬虫脚本
            |--__init__.py  
            |--items.py               
            |--main.py                执行爬虫脚本文件
            |--middlewares.py         中间件(爬虫, 下载中间键)
            |--pipelines.py           持久化相关
            |--settings.py            配置文件
	|--scrapy.cfg                    上线配置

2.4 基本使用

爬虫脚本属性说明
allowed_domains 限制配置, 只解析设置的url下的地址, 网页中有其他网站的连接不会去解析.
start_urls 爬取的地址, 返回的页面数据被, parse方法的的response参数接收.
* 1. 修改爬虫脚本代码
import scrapy


class ChoutiSpider(scrapy.Spider):
    name = 'chouti'
    allowed_domains = ['dig.chouti.com']
    start_urls = ['http://dig.chouti.com/']

    def parse(self, response):
        # 展示获取的网页信息
        print(response.text)

* 2. 命令运行代码
     带运行日志: scrapy crawl 爬虫程序名
     不带运行日志: scrapy crawl 爬虫程序名 --nolog  
     * 没有运行日志错误就不展示了...
* 3. 右键运行
	 在项目目录下创建一个py文件( main.py), 在文件输入以下代码, 右击运行此代码,
from scrapy.cmdline import execute

# execute(['命令', '参数', '运行的爬虫程序', '额外参数'])

# 带运行日志执行
# execute(['scrapy', 'crawl', 'chouti'])

# 不带运行日志执行
execute(['scrapy', 'crawl', 'chouti', '--nolog'])

# 执行多个排着写即可
# execute(['scrapy', 'crawl', 'xxx', '--nolog'])
* 4. 爬取信息默认遵循网站的爬虫协议
from scrapy.cmdline import execute


# 爬取百度网页信息, 不爬虫协议不予许爬取, 执行这个脚本获取不到任何信息
execute(['scrapy', 'crawl', 'baidu'])

2022-07-09_225215

* 5. 不遵循爬虫协议, 修改settings配置配置文件.
# settings.py

# Obey robots.txt rules
ROBOTSTXT_OBEY = False
* 6. 再次执行爬虫脚本, 获取到网页信息

2022-07-09_225719

后面是凑字数, 为什么呢, 我写的内容都写在代码块中, 段落少于10行文章质量低!!!

一、在平台发布以下相关内容 审核将不予通过
1、违反法律法规和相关政策
违反宪法确定的基本原则,煽动抗拒或者破坏宪法、法律、行政法规实施;
危害国家统一、主权和领土完整,泄露国家秘密,危害国家安全,损害国家尊严、荣誉和利益,宣扬恐怖主义、极端主义;
诋毁民族优秀文化传统,煽动民族仇恨、民族歧视,侵害民族风俗习惯、歪曲民族历史和民族历史人物,损害革命领袖、英雄烈士形象,伤害民族感情,破坏民族团结;
煽动破坏国家宗教政策,宣扬宗教狂热,危害宗教和睦,伤害信教公民宗教感情,破坏信教公民和不信教公民团结,宣扬邪教、封建迷信;
危害社会公德,扰乱社会秩序,破坏社会稳定,宣扬淫秽色情、赌博、吸毒,渲染暴力、恐怖,教唆犯罪或者传授犯罪方法;
教唆、教授、组织他人进行违法乱纪活动,以非法民间组织名义活动的,宣传违法违规物品;
侵害未成年人合法权益或者损害未成年人身心健康;
侵犯他人隐私,侮辱或者诽谤他人,侵害他人合法权益;
侵害他人名誉权、肖像权、知识产权、商业秘密等合法权利;
含有法律、行政法规、规章、条例以及任何具有法律效力之规范所限制或禁止的其它内容。
————————————————
版权声明:本文为CSDN博主「Python_21.」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_46137324/article/details/126045143

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

3.爬虫之Scrapy框架的安装与使用 的相关文章

  • Python:Scrapy CSV 导出不正确?

    我只是想写入 csv 但是 我有两个单独的 for 语句 因此每个 for 语句的数据独立导出并破坏顺序 建议 def parse self response hxs HtmlXPathSelector response titles hx
  • 需要帮助来模拟 xhr 请求

    我需要使用 加载更多按钮 来抓取网站 这是我用 Python 编写的蜘蛛代码 import scrapy import json import requests import re from parsel import Selector f
  • Scrapy Splash不会执行lua脚本

    我遇到了一个问题 我的 Lua 脚本拒绝执行 ScrapyRequest 调用返回的响应似乎是 HTML 正文 而我期待的是文档标题 我假设 Lua 脚本从未被调用 因为它似乎对响应没有明显影响 我已经翻阅了很多文档 但似乎不太明白这里缺少
  • Scrapy 抓取 div 具有多个类?

    我正在尝试使用 产品 类来获取 div 问题是 一些具有 product 类的 div 也具有 product small 类 所以当我使用xpath div class product 它仅捕获具有一个类的 div 而不捕获多个类的 di
  • 将 Scrapy 与经过身份验证(登录)的用户会话一起使用

    In the Scrapy 文档 https doc scrapy org en latest topics request response html using formrequest from response to simulate
  • Scrapy如何过滤爬取的url?

    我想知道Scrapy是如何过滤那些爬取的url的 它是否存储所有以类似方式爬行的网址crawled urls list 当它得到一个新的 url 时 它会查找列表以检查该 url 是否存在 这个过滤部分的代码在哪里爬行蜘蛛 path to
  • Scrapy 遭遇 DEBUG:爬行(400)

    我正在尝试使用 Scrapy 抓取页面 https zhuanlan zhihu com wangzhenotes 我运行这个命令 scrapy shell https zhuanlan zhihu com wangzhenotes and
  • 如何使用google api抓取数据

    import requests def search query pages 4 rsz 8 url https ajax googleapis com ajax services search web params v 1 0 Versi
  • 使用 scrapy 抓取多个页面

    我正在尝试使用 scrapy 抓取多个网页 页面的链接如下 http www example com id some number 在下一页中 末尾的数字减少了1 所以我正在尝试构建一个蜘蛛 它可以导航到其他页面并抓取它们 我的代码如下 i
  • 将 Tor 与 scrapy 框架结合使用

    我正在尝试抓取网站 该网站足够复杂以阻止机器人 我的意思是它只允许几个请求 之后 Scrapy 挂起 问题1 有没有办法 如果Scrapy挂起 我可以从同一点重新启动我的爬行过程 为了摆脱这个问题 我这样写了我的设置文件 BOT NAME
  • 用scrapy一一爬取网站列表

    我正在尝试抓取网站列表scrapy 我尝试将网站网址列表作为start urls 但后来我发现我买不起那么多内存 有什么办法可以设置scrapy一次抓取一两个网站 您可以尝试使用concurrent requests 1以免数据超载 htt
  • Scrapy中如何控制yield的顺序

    帮助 阅读下面的scrapy代码和爬虫的结果 我想从中抓取一些数据http china fathom info data data json http china fathom info data data json 并且仅Scrapy被允
  • Scrapy 阿拉伯字母返回一些奇怪的东西

    我在用scrapy关于阿拉伯字母和英文字母 英文字母完美地工作 然而 阿拉伯字母显示如下 gs300 2006 u0644 u0643 u0632 u0633 u062c u064a 有什么帮助吗 我正在使用 python 和 scrapy
  • 我有 12000 个已知 URL,用 Python 抓取它们的最快方法是什么?

    因此 我有一个从数据库中提取的 URL 列表 我需要抓取并解析每个 URL 的 JSON 响应 某些 URL 返回 null 而其他 URL 返回发送到 csv 文件的信息 我目前正在使用Scrapy 但是抓取这12000个URL大约需要4
  • 如何使用 scrapy 合约?

    Scrapy 合约问题 我开始研究 scrapy 框架 也实现了一些蜘蛛 提取 但我无法为蜘蛛编写单元测试用例 因为合同 scrapy提供的包文档没有正确的程序来编写 测试用例 请帮我解决这件事 Yes 蜘蛛合约 http doc scra
  • 使用scrapy到json文件只得到一行输出

    好吧 我对一般编程很陌生 并且具体使用 Scrapy 来实现此目的 我编写了一个爬虫来从 pinterest com 上的 pin 获取数据 问题是我以前从我正在抓取的页面上的所有引脚获取数据 但现在我只获取第一个引脚的数据 我认为问题出在
  • Python:Scrapy返回元素后面的所有html,而不仅仅是元素的html

    我遇到了 Scrapy 行为异常的问题 几个月前我编写了一个简单的函数 它返回给定 xpath 处的项目列表 def get html response path sel Selector text response page source
  • Scrapy - 使用 TwistedScheduler 时出现 ReactorAlreadyInstalledError

    我有以下 Python 代码来启动 APScheduler TwistedScheduler cronjob 来启动蜘蛛 使用一只蜘蛛不是问题 而且效果很好 然而 使用两个蜘蛛会导致错误 twisted internet error Rea
  • 如何使用XPath选择非空段落?

    我想要抓取的网页具有类似的结构 每个都有一个段落是一个问题 一个段落是一个答案 我想抓取每个问题和答案并将它们存储在两个项目中 问题是 在某些页面上 问题和答案分别是 xxx p 1 and xxx p 2 但在其他页面上 xxx p 1
  • Scrapy:AttributeError:“列表”对象没有属性“iteritems”

    这是我关于堆栈溢出的第一个问题 最近想用linkedin 刮刀 https github com junks linkedInScraper 所以我下载并指示 scrapycrawl linkedin com 并收到以下错误消息 供您参考

随机推荐

  • vector 查找/查找和对比结构体元素值

    原地转 http www cplusplus com reference algorithm find if include
  • SP706_MCU监控芯片

    SP706 MCU监控芯片 说明 SP706R S T系列是微处理器 P 监控电路系列 集成了离散解决方案的无数组件 监控 P和数字系统中的电源和电池 SP706R S T系列的功能包括看门狗定时器 P复置 电源故障比较器和手动重置输入 S
  • ELK 性能优化实践

    点击上方蓝色 方志朋 选择 设为星标 回复 666 获取独家整理的学习资料 一 背景介绍 近一年内对公司的 ELK 日志系统做过性能优化 也对 SkyWalking 使用的 ES 存储进行过性能优化 在此做一些总结 本篇主要是讲 ES 在
  • 小程序录音及其动画

    基础功能可以这样写 挺简单的 const recorderManager wx getRecorderManager const innerAudioContext wx createInnerAudioContext Page data
  • 拓世科技集团

    2023年 中国改革开放迎来了45周年 改革春风浩荡 席卷神州大地 45年间 中国特色社会主义伟大事业大步迈入崭新境界 一路上结出了饶为丰硕的果实 中华民族在这45年间的砥砺前行 不仅使中国的经济和社会发展达到了举世瞩目的成就 也在国家民主
  • 通过 ffmpeg 无损剪切/拼接视频

    剪切 拼接视频文件是一种常见需求 在线视频网站现在往往将一个视频文件分割成 n 段 以减少流量消耗 使用 DownloadHelper DownThemAll 这类工具下载下来的往往就是分割后的文件 能实现剪切 拼接视频文件的工具多种多样
  • java.lang.NumberFormatException: null的解决方法

    1 首先附上我的代码 Integer reviewid Integer valueOf request getParameter reviewid System out println reviewid Integer articleid
  • 避免’sudo echo x >’(sudo 重定向) 时’Permission denied’

    避免 sudo echo x gt 时 Permission denied 甲 示例 sudo echo a gt 1 txt bash 1 txt Permission denied 乙 分析 bash 拒绝这么做 说是权限不够 这是因为
  • 【Linux之Shell脚本实战】Linux创建新用户脚本

    Linux之Shell脚本实战 Linux创建新用户脚本 一 脚本要求 二 本地环境介绍 三 配置脚本注释模板 1 编辑 vimrc 文件 2 检查模板生效情况 四 编辑useradd sh 1 新建脚本目录 2 编辑useradd sh脚
  • hibernate注解自动生成数据表

    按习惯来说 一般系统开发都是从数据库开始设计的 但从面向对象开发的角度 系统的设计应该基于对象模型的设计之上 主要考虑对象的设计和逻辑 然后按照对象模型生成数据库结构 利用hibernate的SchemaExport对象可以方便的实现这一点
  • Python数据分析与应用目录

    Python数据分析与应用目录 第1章 Python数据分析概况 1 1 认识数据分析 1 2 熟悉Python数据分析的工具 1 3 Jupyter Notebook 快捷键 第2章 NumPy数值计算基础 2 1 掌握NumPy数组对象
  • 云服务中执行wget,报403

    问题复现 云服务器中配置完nginx后 通过wget测试 报403 解决方法 根目录执行如下命令 chmod R 777 root chmod R 777 root test server chmod R 777 root test ser
  • 在react项目中,使用craco插件进行mobx配置解决方案

    在使用react项目中 不可避免的要使用蚂蚁金服出品的ant desgin前端UI组件 ant desgin推荐使用 craco 一个对 create react app 进行自定义配置的社区解决方案 对 create react app
  • 一台服务器如何部署多个tomcat和项目(最详细的图文教程!!!)

    前言 提示 部署多个项目的方法有很多种 本文记载的是在Windows下 安装多个tomcat通过修改端口来部署项目 Linux部署方式大同小异 第一步 解压tomcat安装包后 复制一份并且重命名 多个tomcat就多复制一份 没有tomc
  • 【测试开花】五、项目管理-前端-实现查询、新增功能

    基于 springboot vue 的测试平台开发继续更新 一 查询功能 在之前的项目列表接口里 支持使用项目名称模糊查询 现在来实现前端 1 input 输入框 到组件库里找个输入框 复制代码 修改代码 v model 绑定了下面 dat
  • 服务器架构的演进

    服务器端的架构随着公司以及业务的发展 它不断演进 其演进的过程如下 https www cnblogs com joelan0927 p 10425530 html https blog csdn net daogla article de
  • 【数电】如何通俗地理解锁存器和触发器

    目录 一 相关知识 1 三极管和MOS管 2 TTL电路和CMOS电路 3 门电路 4 双稳态电路 二 锁存器 触发器 1 锁存器 2 触发器 1 电平触发的SR触发器 2 电平触发的D触发器 3 边沿触发的D触发器 4 脉冲触发的SR触发
  • java环境搭建图解_Windows7下的Java运行环境搭建过程图解

    单击 Java Download 按钮 选中 Accept License Agreement 单选按钮 我们以Windows 64位操作系统为例 下载Windows X64版的jdk 单击 jdk 8u5 windows x64 exe
  • vue-video-player 一款vue的前端视频播放插件 支持m3u8

    项目进行时 对视频模块需要进行组件开发 结合当前使用的开发框架是vuecli 于是寻找到vue video player 根据github上的文档进行开发 发现并不能实现播放功能 于是在网站上进行寻找发现 vue video player依
  • 3.爬虫之Scrapy框架的安装与使用

    1 Scrapy框架 1 1 介绍 Scrapy是一个开源和协作框架 可以用于数据挖掘 监测 自动化测试 获取API所有返回的数据或网络爬虫 Scrapy是基于twisted框架开发的 twisted是一个流行的事件驱动的python网络框