scrapy分页抓取网页( 基于Twisted异步网络库来处理网络通讯的整体架构大致Scrapy )
优采云 发布时间: 2021-10-24 07:10scrapy分页抓取网页(
基于Twisted异步网络库来处理网络通讯的整体架构大致Scrapy
)
1. Scrapy 简介
Scrapy是一个为爬取网站数据和提取结构化数据而编写的应用框架。它可用于包括数据挖掘、信息处理或存储历史数据在内的一系列程序。
它最初是为页面抓取(更准确地说,网络抓取)而设计的,也可用于检索 API(例如,Amazon Associates Web Services)或一般网络抓取工具返回的数据。Scrapy 用途广泛,可用于数据挖掘、监控和自动化测试
Scrapy 使用 Twisted 异步网络库来处理网络通信。整体结构大致如下
刮痧
Scrapy主要包括以下组件:
Scrapy的运行过程大致如下:
首先,引擎从调度器中获取一个链接(URL),供下一个爬虫引擎使用,将URL封装成请求(Request)传递给下载器,下载器下载资源并封装成响应包(Response ) 然后,如果爬虫解析Response解析出一个实体(Item),就会交给实体管道做进一步处理。如果是解析的链接(URL),则将该URL交给Scheduler等待爬取
2. 安装 Scrapy
使用以下命令:
更多虚拟环境操作请查看我的博文
3. Scrapy 教程
在爬取之前,您需要创建一个新的 Scrapy 项目。输入要保存代码的目录,然后执行:
该命令会在当前目录下新建一个目录tutorial,其结构如下:
这些文件主要是:
3.1. 定义项
Items 是将加载捕获数据的容器。它的工作原理类似于 Python 中的字典,但它提供了更多保护,例如填充未定义的字段以防止拼写错误。
通过创建一个scrapy.Item 类并定义一个scrapy.Field 类型的类属性来声明一个Item。
我们控制通过建模所需项目获得的站点数据。例如,我们要获取站点的名称、url 和 网站 描述。我们定义了这三个属性的域。编辑教程目录下的 items.py 文件
3.2. 写作蜘蛛
Spider 是一个用户编写的类,用于从域(或域组)中抓取信息,定义用于下载的初步 URL 列表、如何跟踪链接以及如何解析这些网页的内容以提取项目。
要创建 Spider,请继承 scrapy.Spider 基类,并确定三个主要的强制性属性:
在 /tutorial/tutorial/spiders 目录下创建 dmoz_spider.py
3.3. 爬行
当前项目结构
进入项目根目录,运行命令:
操作结果:
3.4. 提取项目
3.4.1. 介绍选择器
有很多方法可以从网页中提取数据。Scrapy 使用基于 XPath 或 CSS 的表达机制:Scrapy Selectors
XPath 表达式示例及对应含义:
更强大的功能请查看XPath教程
为了方便XPaths的使用,Scrapy提供了Selector类,它有四个方法:
3.4.2. 获取数据
首先使用谷歌浏览器开发者工具,查看网站的源码,看到需要取出的数据表格(这个方法比较麻烦),比较简单的方法就是在你要的东西上右击有兴趣查看元素,可以直接查看网站源码
查看网站的源码后,网站的信息在第二个
编写自己的项目管道非常简单。每个item管道组件都是一个独立的Python类,必须同时实现以下方法:
为 JSON 文件编写一个项目
在settings.py中设置ITEM_PIPELINES来激活item管道,默认为[]
3.6. 存储数据
使用以下命令存储为json文件格式
4. Scarpy 优化豆瓣爬虫爬取
主要是对之前写过的豆瓣爬虫的重构:
豆瓣具有抗爬虫机制。只成功一次后,被ban后会显示403。先说爬虫结构。
完整的豆瓣爬虫代码链接
4.1. 物品
4.2. Spider 主程序
4.3. 未来需要解决的问题
豆瓣抓了一阵子,还没来得及兴奋就被禁了。
禁止
最后为大家准备了一些python学习教程,希望对大家有所帮助。