Python3 爬虫 Scrapy的安装
Scrapy是基于Python的分布式爬虫框架。使用它可以非常方便地实现分布式爬虫。Scrapy高度灵活,能够实现功能的自由拓展,让爬虫可以应对各种网站情况。同时,Scrapy封装了爬虫的很多实现细节,所以可以让开发者把更多的精力放在数据的提取上。
一、在Windows下安装Scrapy
Windows是目前最主流的操作系统,在日常的使用中,Windows有着非常好的用户体验。不过对于程序开发来说,Windows在某些方面会让工作变得比较麻烦,例如安装Scrapy。
要保证Scrapy在Windows中正确安装,请严格按照以下步骤执行。
1. 安装Visual C++ Build Tools
由于在Scrapy的依赖库文件中,pywin32和Twisted的底层是基于C语言开发的,因此需要安装C语言的编译环境。对于Python3.6来说,可以通过安装Visual C++ BuildTools来安装这个环境。Visual C++ Build Tools是微软公司开发的,下载地址为https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=15,下载下来的只是一个大小为1MB左右的安装器,运行以后的界面如图:
单击“安装”按钮进行安装,这个安装器会自动下载需要的文件。安装过程视网速和计算机性能而定,一般需要30~60min。
出现上图所示,这是因为系统没有安装.Net Framework或者安装的版本太低。此时下载并安装一个4.5.1或以上版本的.Net Framework即可。
安装好.Net Framework以后,Microsoft Visual C++ Build Tools应该就可以正常安装了。
2. 安装pywin32
在Windows系统中搭建Scrapy的环境,有两个第三方库不能使用常规的方法安装。第一个是lxml,第二个是pywin32。pywin32和lxml一样,不建议使用pip来安装,因为10次至少有9次都会安装出错。pywin32甚至也不能使用安装lxml的方式来安装。pywin32 必须使用.exe安装包来进行安装。
根据计算机上的Python版本和位数下载并安装最新版的pywin32,安装程序会自动寻找Python的安装路径,所以不需要做任何修改,一直单击“下一步”按钮即可。
3. 安装Twisted
Scrapy需要依赖Twisted。Twisted是Python中的一个非常重要的基于事件驱动的异步输入/输出(Input/Output,I/O)引擎。Twisted的安装依赖于pywin32和前面的Visual C++ Build Tools,所以必须先安装前面这两个东西,才能安装Twisted。
到目前为止,已经可以直接在CMD中使用pip来安装Twisted了:
pip install twisted
不过先别着急,这样安装虽然从功能上说没有问题,但并不是一个好方法。因为Twisted和之后的Scrapy的安装,会附带安装大量的依赖库,而这些库,仅在Scrapy中会用到,平时的普通开发中几乎不会用到。所以如果把它们安装到系统的Python环境中,会导致Python环境的混乱。而且发布爬虫的时候,也不便于导出涉及的依赖库文件。
因此,建议使用Virtualenv创建一个虚拟的Python环境来安装Scrapy剩下的部分。
Virtualenv是Python的一个第三方库,使用它可以创建Python的虚拟环境。使用安装普通第三方库的方法就可以安装Virtualenv:
pip install virtualenv
最理想的情况是,系统的Python环境中只安装Virtualenv,之后的所有开发都在Virtualenv创建的虚拟Python环境中进行。每个项目都有它自己独立的虚拟Python环境,各个环境之间互不干扰。但是,在Windows系统中,这个最理想的情况有时候没有办法实现。例如在搭建Scrapy时,通过安装.exe文件的方式来安装pywin32的时候,是没有办法指定安装位置的,所以pywin32必定会安装到系统的Python环境中。在这种情况下,就必须让Virtualenv创建的虚拟Python环境可以使用系统Python中的第三方库。
要让Virtualenv使用系统Python环境的第三方库,就需要在CMD中使用下面的命令来创建虚拟环境:
virtualenv --always-copy --system-site-packages venv
创建虚拟环境以后,可以使用下面的命令来激活虚拟环境:
venv\scripts\activate
不要关闭现在这个CMD窗口,接下来的所有操作都要在这里进行。安装Twisted:
pip install twisted
这个文件比较大,需要几分钟的时间才能安装完成。
安装完成Twisted以后,在虚拟的Python环境中安装lxml。
4. pip安装Scrapy
前面的环境都准备好以后,就可以使用pip来安装Scrapy了:
pip install scrapy
二、在Linux下安装Scrapy
在Linux下安装Scrapy比在Windows下安装简单得多,可以完全通过命令来操作。
1. 安装依赖库
在Linux的终端中执行下面的命令来安装依赖库:
sudo apt-get install python3-dev python3-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev
不用担心这里面的某些库已经安装,因为apt-get会自动检测并跳过这些已经安装的库。
2. 创建Virtualenv虚拟Python环境并安装Scrapy
在Linux的终端中创建虚拟的Python环境:
virtualenv --always-copy –python=python3 venv
激活虚拟的Python环境:
. venv/bin/activate
安装Scrapy:
pip install scrapy
注意,在Virtualenv创建的虚拟Python环境中,执行pip命令安装第三方库时是不需要使用sudo命令的。
三、在Mac OS下安装Scrapy
在Mac OS下面安装Scrapy非常简单,大多数人可以直接从Linux安装流程的第2步开始:
在终端中创建虚拟的Python环境:
virtualenv --always-copy --python=python3 venv
激活虚拟的Python环境:
. venv/bin/activate
安装Scrapy:
pip install scrapy
不过,由于pip的网络经常会受到干扰,所以可能有在安装的时候会得到在线连接超时等报错信息。这个时候,可以使用一些代理工具来让网络变得稳定,比如,ProxyChains 代理工具的安装和使用解决下载依赖库的网络超时的问题。
--------------------------------------
没有自由的秩序和没有秩序的自由,同样具有破坏性。
相关文章:

Python3 爬虫 Scrapy的安装
Scrapy是基于Python的分布式爬虫框架。使用它可以非常方便地实现分布式爬虫。Scrapy高度灵活,能够实现功能的自由拓展,让爬虫可以应对各种网站情况。同时,Scrapy封装了爬虫的很多实现细节,所以可以让开发者把更多的精力放在数据的…...

QT中QString类的各种使用
大部分的QString使用可以参考:QT中QString 类的使用--获取指定字符位置、截取子字符串等_qstring 取子串-CSDN博客 补充一种QString类的分离:Qt QString切割(Split()与Mid()函数详解)_qstring split-CSDN博客 1. Trimmed和Simplified函数(去除空白) trimmed:去除了…...
linux 网络安全不完全笔记
一、安装Centos 二、Linux网络网络环境设置 a.配置linux与客户机相连通 b.配置linux上网 三、Yum详解 yum 的基本操作 a.使用 yum 安装新软件 yum install –y Software b.使用 yum 更新软件 yum update –y Software c.使用 yum 移除软件 yum remove –y Software d.使用 yum …...
uniapp将图片url转换成base64支持app和h5
uniapp将图片url转换成base64支持app和h5 imageToBase64支持app和h5, app内使用plus.io.resolveLocalFileSystemURL方法转换 h5内使用uni.request方法转换 // 图片转base64 export const imageToBase64 (path) > {// #ifdef APP-PLUSreturn new Promise((resolve, rejec…...

odoo17 档案管理之翻译2
翻译格式:#: model_terms:对象名称,arch_db:模块名.xml_id #. module: dms #: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban #: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban #: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_…...

风尚云网前端学习:制作一款简易的在线计算器
风尚云网前端学习:制作一款简易的在线计算器 简介 在前端开发的学习过程中,实现一个简单的在线计算器是一个常见的练习项目。它不仅能够帮助我们熟悉HTML、CSS和JavaScript的基本用法,还能够加深我们对事件处理和DOM操作的理解。今天&#…...

Android蓝牙架构,源文件目录/编译方式学习
Android 版本 发布时间 代号(Codename) Android 1.0 2008年9月23日 无 Android 1.1 2009年2月9日 Petit Four Android 1.5 2009年4月27日 Cupcake Android 1.6 2009年9月15日 Donut Android 2.0 2009年10月26日 Eclair Android 2.1 2…...

ubuntu中使用ffmpeg和nginx推流rtmp视频
最近在测试ffmpeg推流rtmp视频,单独安装ffmpeg是无法完成推流的,需要一个流媒体服务器,常用nginx,可以直接在ubuntu虚拟机里面测试一下。 测试过程不涉及编译ffmpeg和nginx,仅使用基本功能: 1 安装ffmpeg …...
strongswan测试流程
测试shell脚本文件testing/do-tests,测试配置文件testing/testing.conf。do-tests脚本不加参数,将依次执行testing/tests/目录下的所有测试用例。do-tests脚本有两个参数-v和-t,前者在测试中记录详细信息,后者在输出信息中增加时间…...

[CKS] CIS基准测试,修复kubelet和etcd不安全项
目前的所有题目为2024年10月后更新的最新题库,考试的k8s版本为1.31.1 专栏其他文章: [CKS] K8S Admission Set Up[CKS] CIS基准测试,修复kubelet和etcd不安全项[CKS] K8S NetworkPolicy Set Up[CKS] 利用Trivy对image进行扫描[CKS] 利用falco进行容器…...
Linux/Windows/OSX 上面应用程序重新启动运行。
1、Linux/OSX 上面重新运行程序,直接使用 execvp 函数就可以了,把main 函数传递来的 argv 二维数组(命令行参数)传进去就可以,注意不要在 fork 出来的子进程搞。 2、Windows 平台可以通过 CreateProcess 函数来创建新的…...
React拆分组件中的传值问题
在我们实际项目开发中,很多时候为为了项目后期便于维护,都会将相关的组件进行拆分,拆分过后,会将数据方法在父组件中进行编写,然后将一些逻辑拆分为组件,在这个过程中,最重要的就是数据的传递&a…...

RocketMQ的使⽤
初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种⽅式: 同步通讯:就像打电话,需要实时响应。 异步通讯:就像发邮件,不需要⻢上回复。 两种⽅式各有优劣,打电话可以⽴即得到响应,但…...

Android Studio 设置不显示 build-tool 无法下载
2024版本查看build-tool版本 File -> Settings -> Languages & Frameworks -> Android SDK 或者直接打开Settings后搜索“SDK” 解决方案 将 Android Studio 升级到2022.2.1以上的版本将 C:/Windows/System32/drivers/etc/hosts 文件用管理员身份打开,…...

【Y20030007】基于java+servlet+mysql的垃圾分类网站的设计与实现(附源码 配置 文档)
网垃圾分类网站的设计与实现 1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取 1.摘要 随着全球环境保护意识的提升,垃圾分类已成为一项紧迫且重要的任务。为了有效推动垃圾分类的实施,提升公众的环保意识和参与度,垃圾分类已…...

细说敏捷:敏捷四会之standup meeting
上一篇文章中,我们讨论了 敏捷四会 中 冲刺计划会 的实施要点,本篇我们继续分享敏捷四会中实施最频繁,团队最容易实施但往往也最容易走形的第二个会议:每日站会 关于每日站会的误区 站会是一个比较有标志性的仪式活动࿰…...

ThinkPHP8使用workerman
应用场景说明:通过建立通信,不同用户进行消息推送或数据更新,因为本身需要作为服务端进行主动消息推送,因此使用Gateway方式,如果不需要的可以不采用这种形式,以下内容仅为参考,具体业务场景&am…...
C语言超详细教程
系列文章目录 文章目录 系列文章目录1 运算符1.1 算术运算符:2 控制语句2.1 条件语句:2.2 循环语句:3 函数3.1 函数的定义与声明:3.2 递归函数:4 指针4.1 指针的定义与使用函数指针:5. 数组与字符串5.1 数组一维数组:相同类型元素的集合(如:多维数组:数组的数组(如:…...

[开源]3K+ star!微软Office的平替工具,跨平台,超赞!
大家好,我是JavaCodexPro! 数字化的当下,高效的办公工具是提升工作效率的关键,然而大家想到的一定是 Microsoft Office 办公软件,然而价格也是相当具有贵的性价比。 今天JavaCodexPro给大家分享一款超棒的开源办公套…...
如何借助计算机视觉算法通过识别水尺精准识别水位
如何借助计算机视觉算法通过识别水尺精准识别水位 随着技术的发展,计算机视觉在多个领域得到了广泛的应用,尤其是在环境监测方面。本文将介绍一种利用计算机视觉算法通过识别水尺来精准识别水位的方法。这种方法可以用于河流、水库等场景的水位监测&…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...

软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...