Python爬虫学习笔记(十)————Scrapy

2023-11-17

目录

1.scrapy是什么?

2.安装scrapy

3. scrapy项目的创建以及运行

(1)创建scrapy项目:

(2)项目组成:

(3)创建爬虫文件:

        ①跳转到spiders文件夹中去创建爬虫文件   

        ②scrapy genspider爬虫文件的名字 网页的域名

(4)爬虫文件的基本组成:

(5)运行爬虫文件:

(6)实例

①百度

②58同城

③汽车之家

4.scrapy架构组成

(1)引擎                     

(2)下载器                   

(3)spiders                 

(4)调度器                   

(5)管道(Item pipeline)

 5.scrapy工作原理

6.日志信息和日志等级

(1)日志级别:

(2)settings.py文件设置:

7.scrapy的post请求

(1)重写start_requests方法:

(2)start_requests的返回值:

8.代理

​​​​​​​(1)到settings.py中,打开一个选项

(2)到middlewares.py中写代码


1.scrapy是什么?

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理 或存储历史数据等一系列的程序中。

2.安装scrapy

 pip install scrapy

安装过程中出错:

                    如果安装有错误!!!!

                    pip install Scrapy

                    building 'twisted.test.raiser' extension

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

解决方案:

                    http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted

                    下载twisted对应版本的whl文件(如我的Twisted‐17.5.0‐cp36‐cp36m‐win_amd64.whl),cp后面是 python版本,amd64代表64位,运行命令:

                    pip install C:\Users\...\Twisted‐17.5.0‐cp36‐cp36m‐win_amd64.whl

                    pip install Scrapy

如果再报错

                    python ‐m pip install ‐‐upgrade pip

如果再报错 win32

解决方法:

                    pip install pypiwin32

再报错:使用anaconda

                    使用步骤:

                            打开anaconda

                            点击environments

                            点击not installed

                            输入scrapy apply

                            在pycharm中选择anaconda的环境

3. scrapy项目的创建以及运行

(1)创建scrapy项目:

                终端输入   scrapy startproject   项目名称

注意:项目的名字不允许使用数字开头  也不能包含中文

  

(2)项目组成:

         项目名字

            项目名字

                 spiders(存储的是爬虫文件)

                            __init__.py

                           自定义的爬虫文件.py   ‐‐‐》由我们自己创建,是实现爬虫核心功能的文件                 __init__.py

                items.py                                 ‐‐‐》定义数据结构的地方,爬取的数据都包含哪些,是一

                                                                  个继承自scrapy.Item的类

                middlewares.py                     ‐‐‐》中间件   代理

                pipelines.py                           ‐‐‐》管道文件,里面只有一个类,用于处理下载数据的后

                                                                 续处理默认是300优先级,值越小优先级越高(1‐1000)

                settings.py                             ‐‐‐》配置文件 比如:是否遵守robots协议,User‐Agent

                                                                 定义等

(3)创建爬虫文件:

        ①跳转到spiders文件夹中去创建爬虫文件   

                        cd 目录名字/目录名字/spiders

例如:cd scrapy_baidu_091\scrapy_baidu_091\spiders

        ②scrapy genspider爬虫文件的名字 网页的域名

                        scrapy genspider  爬虫文件的名字 网页的域名

例如:scrapy genspider baidu   http://www.baidu.com

 注:一般情况下不需要添加http协议  因为start_urls的值是根据allowed_domains修改的  所以添加了http的话  那么start_urls就需要我们手动去修改了

(4)爬虫文件的基本组成:

        继承scrapy.Spider类

                name = 'baidu'           ‐‐‐》 运行爬虫文件时使用的名字

                allowed_domains       ‐‐‐》 爬虫允许的域名,在爬取的时候,如果不是此域名之下的 url,会被过滤掉

                start_urls                    ‐‐‐》 声明了爬虫的起始地址,可以写多个url,一般是一个

                parse(self, response) ‐‐‐》解析数据的回调函数

                        response.text                  ‐‐‐》响应的是字符串

                        response.body                ‐‐‐》响应的是二进制文件

                        response.xpath()             ‐‐‐》xpath方法的返回值类型是selector列表

                                                                        可以直接是xpath方法来解析response中的内容

                        extract()                           ‐‐‐》提取的是selector对象的是data

                        extract_first()                   ‐‐‐》提取的是selector列表中的第一个数据

(5)运行爬虫文件:

                scrapy crawl 爬虫名称

                 例如: scrapy crawl baidu

                注意:应在spiders文件夹内执行

(6)实例

①百度
import scrapy


class BaiduSpider(scrapy.Spider):
    # 爬虫的名字  用于运行爬虫的时候 使用的值
    name = 'baidu'
    # 允许访问的域名
    allowed_domains = ['http://www.baidu.com']
    # 起始的url地址  指的是第一次要访问的域名
    # start_urls 是在allowed_domains的前面添加一个http://
    #             在 allowed_domains的后面添加一个/
    start_urls = ['http://www.baidu.com/']

    # 是执行了start_urls之后 执行的方法   方法中的response 就是返回的那个对象
    # 相当于 response = urllib.request.urlopen()
    #       response  = requests.get()
    def parse(self, response):
        print('苍茫的天涯是我的爱')
②58同城
import scrapy


class TcSpider(scrapy.Spider):
    name = 'tc'
    allowed_domains = ['https://bj.58.com/sou/?key=%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91']
    start_urls = ['https://bj.58.com/sou/?key=%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91']

    def parse(self, response):
        # 字符串
        # content = response.text
        # 二进制数据
        # content = response.body
        # print('===========================')
        # print(content)

        span = response.xpath('//div[@id="filter"]/div[@class="tabs"]/a/span')[0]
        print('=======================')
        print(span.extract())
③汽车之家
import scrapy


class CarSpider(scrapy.Spider):
    name = 'car'
    allowed_domains = ['https://car.autohome.com.cn/price/brand-15.html']
    # 注意如果你的请求的接口是html为结尾的  那么是不需要加/的
    start_urls = ['https://car.autohome.com.cn/price/brand-15.html']

    def parse(self, response):
        name_list = response.xpath('//div[@class="main-title"]/a/text()')
        price_list = response.xpath('//div[@class="main-lever"]//span/span/text()')

        for i in range(len(name_list)):
            name = name_list[i].extract()
            price = price_list[i].extract()
            print(name,price)

4.scrapy架构组成

(1)引擎                     

                ‐‐‐》自动运行,无需关注,会自动组织所有的请求对象,分发给下载器。

(2)下载器                   

                ‐‐‐》从引擎处获取到请求对象后,请求数据。

(3)spiders                 

                ‐‐‐》Spider类定义了如何爬取某个(或某些)网站。包括了爬取的动作(例 如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item)。 换句话说,Spider就是您定义爬取的动作及 分析某个网页(或者是有些网页)的地方。

(4)调度器                   

                ‐‐‐》有自己的调度规则,无需关注。

(5)管道(Item pipeline)

                ‐‐‐》最终处理数据的管道,会预留接口供我们处理数据。

当Item在Spider中被收集之后,它将会被传递到Item Pipeline,一些组件会按照一定的顺序执行对Item的处理。 每个item pipeline组件(有时称之为“Item Pipeline”)是实现了简单方法的Python类。他们接收到Item并通过它执行 一些行为,同时也决定此Item是否继续通过pipeline,或是被丢弃而不再进行处理。 以下是item pipeline的一些典型应用:

  • 清理HTML数据
  • 验证爬取的数据(检查item包含某些字段)
  • 查重(并丢弃)
  • 将爬取结果保存到数据库中

 5.scrapy工作原理

6.日志信息和日志等级

(1)日志级别:

                CRITICAL:严重错误

                ERROR: 一般错误

                WARNING: 警告

                INFO: 一般信息

                DEBUG: 调试信息

                默认的日志等级是DEBUG

                只要出现了DEBUG或者DEBUG以上等级的日志

                那么这些日志将会打印

(2)settings.py文件设置:

                默认的级别为DEBUG,会显示上面所有的信息

                在配置文件中 settings.py

                LOG_FILE : 将屏幕显示的信息全部记录到文件中,屏幕不再显示,注意文件后缀一定是.log

                LOG_LEVEL : 设置日志显示的等级,就是显示哪些,不显示哪些

7.scrapy的post请求

(1)重写start_requests方法:

                def start_requests(self)

(2)start_requests的返回值:

                 scrapy.FormRequest(url=url, headers=headers, callback=self.parse_item, formdata=data)

                        url: 要发送的post地址

                        headers:可以定制头信息

                        callback: 回调函数

                        formdata: post所携带的数据,这是一个字典

8.代理

​​​​​​​(1)到settings.py中,打开一个选项

                DOWNLOADER_MIDDLEWARES = {

                        'postproject.middlewares.Proxy': 543,

                }

(2)到middlewares.py中写代码

                def process_request(self, request, spider):

                        request.meta['proxy'] = 'https://113.68.202.10:9999'

                        return None

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

Python爬虫学习笔记(十)————Scrapy 的相关文章

  • 如何在多进程系统中实现锁定?

    我们正在并行运行许多詹金斯项目 我们使用 python 并且选择使用 pyenv 管理虚拟环境 不幸的是 pyenv 有一个众所周知的竞争条件 https github com yyuu pyenv issues 174 为了解决这个问题
  • 从文本文件中删除特定字符

    我对 Python 和编码都很陌生 我当时正在做一个小项目 但遇到了一个问题 44 1 6 23 2 7 49 2 3 53 2 1 68 1 6 71 2 7 我只需要从每行中删除第三个和第六个字符 或者更具体地说 从整个文件中删除 字符
  • 类型错误:需要二进制或 unicode 字符串,得到 618.0

    I ve been trying to implement this ML Linear Model into my dataset https www tensorflow org tutorials estimator linear L
  • Arcpy 模数在 Pycharm 中不显示

    如何将 Arcpy 集成到 Pycharm 中 我尝试通过导入模块但它没有显示 我确实知道该模块仅适用于 2 x python arcpy 在 PyPi Python 包索引 上不可用 因此无法通过 pip 安装 要使用 arcpy 您需要
  • 如何使用scrapy检查网站是否支持http、htts和www前缀

    我正在使用 scrapy 来检查某些网站是否工作正常 当我使用http example com https example com or http www example com 当我创建 scrapy 请求时 它工作正常 例如 在我的pa
  • python 中的 <> 运算符有什么作用?

    我刚刚遇到这个here http www feedparser org feedparser py 总是这样使用 if string1 find string2 lt gt 1 pass 什么是 lt gt 运算符这样做 为什么不使用通常的
  • Python Anaconda:如何测试更新的库是否与我现有的代码兼容?

    我在 Windows 7 机器上使用 Python 2 7 Anaconda 安装进行数据分析和科学计算 当新的库发布时 例如新版本的 pandas patsy 等 您建议我如何测试新版本与现有代码的兼容性 是否可以在同一台机器上安装两个
  • python中basestring和types.StringType之间的区别?

    有什么区别 isinstance foo types StringType and isinstance foo basestring 对于Python2 basestring是两者的基类str and unicode while type
  • 查找 Pandas DF 行中的最短日期并创建新列

    我有一个包含多个日期的表 有些日期将为 NaN 我需要找到最旧的日期 所以一行可能有 DATE MODIFIED WITHDRAWN DATE SOLD DATE STATUS DATE 等 因此 对于每一行 一个或多个字段中都会有一个日期
  • pandas 相当于 np.where

    np where具有向量化 if else 的语义 类似于 Apache Spark 的when otherwise数据帧方法 我知道我可以使用np where on pandas Series but pandas通常定义自己的 API
  • 给定一个排序数组,就地删除重复项,使每个元素仅出现一次并返回新长度

    完整的问题 我开始在线学习 python 但对这个标记为简单的问题有疑问 给定一个排序数组 就地删除重复项 使得每个 元素只出现一次并返回新的长度 不分配 另一个数组的额外空间 您必须通过修改输入来完成此操作 数组就地 具有 O 1 额外内
  • 是否需要关闭没有引用它们的文件?

    作为一个完全的编程初学者 我试图理解打开和关闭文件的基本概念 我正在做的一项练习是创建一个脚本 允许我将内容从一个文件复制到另一个文件 in file open from file indata in file read out file
  • Python 中维基百科 API 中的 DisambiguationError 和 GuessedAtParserWarning

    我想获得维基百科与搜索词相关的可能且可接受的名称列表 在这种情况下是 电晕 当输入以下内容时 print wikipedia summary Corona 这给出了以下输出 home virej local lib python3 8 si
  • 检测是否从psycopg2游标获取?

    假设我执行以下命令 insert into hello username values me 我跑起来就像 cursor fetchall 我收到以下错误 psycopg2 ProgrammingError no results to fe
  • 如何在亚马逊 EC2 上调试 python 网站?

    我是网络开发新手 这可能是一个愚蠢的问题 但我找不到可以帮助我的确切答案或教程 我工作的公司的网站 用 python django 构建 托管在亚马逊 EC2 上 我想知道从哪里开始调试这个生产站点并检查存储在那里的日志和数据库 我有帐户信
  • AWS Lambda 不读取环境变量

    我正在编写一个 python 脚本来查询 Qualys API 中的漏洞元数据 我在 AWS 中将其作为 lambda 函数执行 我已经在控制台中设置了环境变量 但是当我执行函数时 出现以下错误 module initialization
  • Django 管理器链接

    我想知道是否有可能 如果可以的话 如何 将多个管理器链接在一起以生成受两个单独管理器影响的查询集 我将解释我正在研究的具体示例 我有多个抽象模型类 用于为其他模型提供小型的特定功能 其中两个模型是DeleteMixin 和GlobalMix
  • 如何使用 python 定位和读取 Data Matrix 代码

    我正在尝试读取微管底部的数据矩阵条形码 我试过libdmtx http libdmtx sourceforge net 它有 python 绑定 当矩阵的点是方形时工作得相当好 但当矩阵的点是圆形时工作得更糟 如下所示 另一个复杂问题是在某
  • IndexError - 具有匀称形状的笛卡尔 PolygonPatch

    我曾经使用 shapely 制作一个圆圈并将其绘制在之前填充的图上 这曾经工作得很好 最近 我收到索引错误 我将代码分解为最简单的操作 但它甚至无法执行最简单的循环 import descartes import shapely geome
  • 如何(安全)将 Python 对象发送到我的 Flask API?

    我目前正在尝试构建一个 Flask Web API 它能够在 POST 请求中接收 python 对象 我使用 Python 3 7 1 创建请求 使用 Python 2 7 运行 API 该 API 设置为在我的本地计算机上运行 我试图发

随机推荐

  • 校园二手物品交易系统微信小程序设计

    系统简介 本网最大的特点就功能全面 结构简单 角色功能明确 其不同角色实现以下基本功能 服务端 后台首页 可以直接跳转到后台首页 用户信息管理 管理所有申请通过的用户 商品信息管理 管理校园二手物品中所有的商品信息 非常详细 违规投诉管理
  • c语言源码解释,C语言一些细节注意(源码+解释)

    最近可能要回归底层开发设计 所以又看了看C的一些东西 顺便对一些问题进行了代码确认 现将代码贴出 希望对各位网友有所帮助 只是为了测试 没有按照什么规范写 代码风格比较烂 哈哈哈哈 大家见谅了 O
  • org.apache.hadoop.hbase.client.RetriesExhaustedException: Can't get the locations

    Hbase API操作表时报出异常 Exception in thread main org apache hadoop hbase client RetriesExhaustedException Can t get the locati
  • C++11新特性总结

    目录 一 统一的列表初始化 适用于各种STL容器 二 类型推导 auto 和 decltype的出现 三 右值引用移动语义 特别重要的新特性 四 万能引用 完美转发 五 可变参数模板 参数包 六 emplace back 的出现和对比分析
  • 判断apk是否签名以及获取apk信息

    一 判断apk是否签名 如果集合apkSingers 为空 说明没有签名人 未签名 try ApkFile apkParser new ApkFile new File C Users kesun5 Desktop doc b apk Ap
  • 安装Node.js和cnpm

    一 安装Node js 1 下载 Node js官网下载 根据自身系统下载对应的安装包 我这里为Windows10 64位 故选择下载第一个安装包 2 然后点击安装 选择自己要安装的路径 此处我选择的是 D Program Files no
  • 容器适配器【stack、queue、priority_queue和反向迭代器】

    全文目录 适配器原理 stack 和 queue deque 模拟实现stack 模拟实现queue 模拟实现priority queue 反向迭代器 适配器原理 适配器 适配器是一种设计模式 设计模式是一套被反复使用的 多数人知晓的 经过
  • 如何延长周末体验感?工作与休息的完美平衡

    引言 对于工作繁忙的人们 周末是一段宝贵的时间 是放松身心 恢复精力的机会 然而 很多人常常发现 即使是在周末 也无法获得高质量的休息 本文将分享一些关于如何延长周末体验感 提升休息质量的方法 从时间规划 体验感提升以及充分休息几个方向进行
  • 如何借助 AI ,生成专属图标? #iconify AI

    不到一分钟 就可生成个性化专属图标 这款 AI 图标工具有多神奇 iconify AI 在几秒钟内为应用程序 网站创建专业图标 告别传统应用图标设计的麻烦和费用 让 AI 设计用户的专属品牌图标 图源 iconify AI 如何用 icon
  • 什么是防抖,节流? js实现核心代码,以及应用场景?

    防抖和节流都是用于项目优化的手段 用来限制事件的触发频率的两种常见技术 什么是防抖 在事件被触发后 等待一段时间 如果在这段时间内没有再次触发该事件 则执行相应的操作 如果在定时等待期间又触发的该事件 则重新计时 主要用于处理频繁触发的事件
  • GWO灰狼优化算法以及Matlab代码

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 GWO灰狼算法原理 进化更新 位置更新 紧随3只头狼 GWO灰狼算法流程图 GWO优化算法matlab代码 main函数 适应度函数 GWO主体代码 测试结果F1
  • 【Java小疑问】类和方法 前面添加public和不添加public的区别

    讨论前提 包的存在 Java 中修饰类修饰符 public default 默认 1 public 该类可在同一或不同包下访问 父包 子包皆可访问 2 default 该类仅可在同一个包下可访问 父包 子包皆无法访问 注意 在 Java 中
  • Linux下 (Ubuntu16.04 ) Tesseract4.0训练字库,提高正确识别率Linux下(合并字库)

    由于tesseract的中文语言包 chi sim 对中文手写字体或者环境比较复杂的图片 识别正确率不高 因此需要针对特定情况用自己的样本进行训练 提高识别率 通过训练 也可以形成自己的语言库 Linux和windows的系统方法一样 就是
  • 前端vue对接后端导出excel文件的原理和教程

    前言 前面我们讲过了前端怎么读取excel文件里面的内容数据问题 这边讲解前端怎么对接后端接口并导出excel文件 功能简单易实现 1 导出excel文件的原理 后端通过接口把文件流的数据返回给前端 前端再模拟一个下载的动作 进行文件数据的
  • 阿里云域名注册流程(全流程详细教程)

    阿里云域名注册流程很简单 先注册阿里云账号 账号必须通过实名认证 然后创建信息模版 个人或企业信息模板必须通过实名认证 然后想好域名名称和域名后缀 最后在阿里云域名注册官网进行新域名的注册 阿里云百科来详细说下阿里云域名注册流程 域名注册官
  • java 遍历String[]的常用两种方法

    初学java 在此记录 public static void main String args String str new String 3 for int i 0 i lt str length i str i i i 方法一 for循
  • Python3之爬虫----retrying模块的使用和处理cookie相关的请求

    1 1 设使用超时参数 requests get url headers headers timeout 3 设置超时参数 若url在三秒内未得到响应 报错 1 2 retrying模块的使用 第三方模块 from retrying imp
  • Tank大战游戏模拟(java版)

    Java小项目 坦克大战 1 任务分析 玩家进入游戏 通过操纵坦克来守卫基地 摧毁全部敌方坦克来取得胜利 如果基地被摧毁 或者玩家坦克被摧毁 则判定游戏失败 2 具体分析 图形用户界面使用GUI技术实现 游戏中坦克的方向转动可以通过四种不同
  • node.js 详解

    目录 一 初始node js 1 为什么 JavaScript 可以在浏览器中被执行 2 node js 简介 3 node js 查看是否安装 4 运行文件 1 在终端中输入 node 文件 2 终端中的快捷键 二 fs 文件系统模块 1
  • Python爬虫学习笔记(十)————Scrapy

    目录 1 scrapy是什么 2 安装scrapy 3 scrapy项目的创建以及运行 1 创建scrapy项目 2 项目组成 3 创建爬虫文件 跳转到spiders文件夹中去创建爬虫文件 scrapy genspider爬虫文件的名字 网