热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python爬虫利器scrapy怎么使用

本文小编为大家详细介绍“python爬虫利器scrapy怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“python爬虫利器scrapy怎么使用”文章能

本文小编为大家详细介绍“python爬虫利器scrapy怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“python爬虫利器scrapy怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

架构及简介

Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。

Scrapy 使用了 Twisted(其主要对手是Tornado)异步网络框架来处理网络通讯,可以加快我们的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活的完成各种需求。

python爬虫利器scrapy怎么使用

Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。

Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。

Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,

Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),

Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.

Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。

Spider Middlewares(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)

开发流程

开发一个简单爬虫步骤:

  • 新建项目

scrapy startproject demo
  • 编写spider

    • 种子url (请求)

    • 解析方法

  • 编写item
    结果数据模型

  • 持久化
    编写pipelines

生成目录介绍

scrapy.cfg :项目的配置文件

mySpider/ :项目的Python模块,将会从这里引用代码

mySpider/items.py :项目的目标文件

mySpider/pipelines.py :项目的管道文件

mySpider/settings.py :项目的设置文件

mySpider/spiders/ :存储爬虫代码目录

使用命令创建爬虫类

scrapy genspider gitee "gitee.com"

解析

通常我们解析都会涉及到 xpath csspath 正则,有的时候可能还有jsonpath(python中json访问基本不用使用复杂的jsonpath,字典访问就可以)
scrapy 内置xpath和csspath支持

Selector

而解析器本身也可以单独使用

  • xpath()

  • extract_first()

  • extract() #返回一个列表

  • 索引访问,因为scrapy.selector.unified.SelectorList继承list,可以通过索引访问

from scrapy import Selector

if __name__ == '__main__':
    body = """


    
    


    

hello

    

hello

"""     s = Selector(text=body)     title=s.xpath("//title/text()").extract_first();#抽取     print(title)     #Title     pe = s.xpath("//p")     print(s.xpath("//p").extract())     #['

hello

', '

hello

']     print(pe)     #[hello

'>, hello

'>]     print(type(pe))     #     print(type(pe[0]))  #通过索引访问     #     print(type(pe.pop()))     #     p=s.xpath("//p").extract_first()     print(p)
  • css()
    css选择器我们::text选择内容,用::attr() 选择属性

print(s.css("title").extract_first())
print(s.css("title::text").extract_first())
print(s.css("title::text").extract())
print(s.css("p.big::text").extract_first())
print(s.css("p.big::attr(class)").extract_first())


# 
# Title
# ['Title']
# hello big
# big
  • css()和xpath()混用
    scrapy.selector.unified.SelectorList scrapy.selector.unified.Selector 本身有css和xpath方法,所以可以组合使用

print(s.xpath("//body").css("p.big").extract_first())
print(s.css("body").xpath("//p[@class='big']").extract_first())

# 

hello big 

hello big 

  • re()和re_first()
    scrapy.selector.unified.SelectorList scrapy.selector.unified.Selector 拥有 re()方法,支持通过正则来过滤

print(s.xpath("//p/text()").re_first("big"))
print(type(s.xpath("//p/text()").re("big")))

# big
# 

** 但re()返回列表,.re_first返回str,所以不能再继续调用其他的选择方法

在爬虫中使用解析器

response对象已经

class GiteeSpider(scrapy.Spider):
    name = 'gitee'
    allowed_domains = ['gitee.com']
    start_urls = ['https://gitee.com/haimama']

    def parse(self, response):
        print(type(response))
        t=response.xpath("//title/text()").extract_first()
        print(t)

##启动爬虫执行后的结果
# 执行结果省略日志
# 
# 码马 (haimama) - Gitee

response对象类型为 scrapy.http.response.html.HtmlResponse,该类继承TextResponse 。拥有xpath()和css()方法如下

所以response 可以直接使用前文中的Selector 的方式来解析

    def xpath(self, query, **kwargs):
        return self.selector.xpath(query, **kwargs)

    def css(self, query):
        return self.selector.css(query)

配置文件

settings.py是爬虫的配置文件,要正常启动爬虫的话,一定注意将robo协议限制 修改为 ROBOTSTXT_OBEY = False
其他相关配置,我们下节再介绍

启动爬虫

在爬虫目录编写run.py方法,添加如下脚本,这样就可以直接执行爬虫了。如果命令行执行的话scrapy crawl gitee。其中gitee为爬虫名,对应GiteeSpider中的name字段

# coding: utf-8

from scrapy import cmdline
if __name__ == '__main__':
    cmdline.execute("scrapy crawl gitee".split())

# scrapy crawl gitee

读到这里,这篇“python爬虫利器scrapy怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程笔记行业资讯频道。


推荐阅读
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 离线环境下的Python及其第三方库安装指南
    在项目开发中,有时会遇到电脑只能连接内网或完全无法联网的情况。本文将详细介绍如何在这种环境下安装Python及其所需的第三方库,确保开发工作的顺利进行。 ... [详细]
  • 本文介绍如何使用 Python 提取和替换 .docx 文件中的图片。.docx 文件本质上是压缩文件,通过解压可以访问其中的图片资源。此外,我们还将探讨使用第三方库 docx 的方法来简化这一过程。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文介绍如何使用Python进行文本处理,包括分词和生成词云图。通过整合多个文本文件、去除停用词并生成词云图,展示文本数据的可视化分析方法。 ... [详细]
  • 本文详细介绍了Python编程语言的学习路径,涵盖基础语法、常用组件、开发工具、数据库管理、Web服务开发、大数据分析、人工智能、爬虫开发及办公自动化等多个方向。通过系统化的学习计划,帮助初学者快速掌握Python的核心技能。 ... [详细]
  • 在Python开发过程中,随着项目数量的增加,不同项目依赖于不同版本的库,容易引发依赖冲突。为了避免这些问题,并保持开发环境的整洁,可以使用Virtualenv和Virtualenvwrapper来创建和管理多个隔离的Python虚拟环境。 ... [详细]
author-avatar
石榴岗村-沙芖鱼
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有