scrapy框架—spiders
学习目标
- 创建一个Scrapy项目
- 定义提取的结构化数据(Item)
- 编写爬取网站的 Spider 并提取出结构化数据(Item)
- 编写 Item Pipelines 来存储提取到的Item(即结构化数据)
1. 创建一个爬虫项目(scrapy startproject)
- 进入自定义的项目目录中,创建一个新的Scrapy项目。运行下列命令:
scrapy startproject myspider
- 其中, myspider 为项目名称,可以看到将会创建一个 myspider 文件夹,目录结构大致如下:
2. 明确目标(mySpider/items.py)
我们打算抓取:http://www.itcast.cn/channel/teacher.shtml 网站里的所有讲师的姓名、职称和个人信息。
- 打开mySpider目录下的items.py
- Item 定义结构化数据字段,用来保存爬取到的数据,有点像Python中的dict,但是提供了一些额外的保护减少错误。
- 可以通过创建一个 scrapy.Item 类, 并且定义类型为 scrapy.Field的类属性来定义一个Item(可以理解成类似于ORM的映射关系)。
- 接下来,创建一个ItcastItem 类,和构建item模型(model)。
import scrapyclass ItcastItem(scrapy.Item):name = scrapy.Field()level = scrapy.Field()info = scrapy.Field()
3. 创建一个爬虫
- 在当前目录下输入命令,将在mySpider/spider目录下创建一个名为itcast的爬虫,并指定爬取域的范围:
scrapy genspider itcast "itcast.cn"
- spiders文件夹下面会多出 itcast.py
spiders 爬虫功能要分两步
1. 发送请求 获取响应
(scrapy框架自动实现 拿到网页的原始代码 response ; parse方法才是提取数据 需要手写)
打开 myspider/spiders目录里的 itcast.py,初始代码如下:
import scrapyclass ItcastSpider(scrapy.Spider):name = "itcast"allowed_domains = ["itcast.cn"]start_urls = ['http://www.itcast.cn/'] # 这里网址可以改成需要爬的def parse(self, response):pass
要建立一个xxxSpider, 你必须用scrapy.Spider类创建一个子类,并确定了三个强制的属性 和 一个方法。
name = “” :这个爬虫的识别名称,必须是唯一的,在不同的爬虫必须定义不同的名字。
allow_domains = [ ] 是搜索的域名范围,也就是爬虫的约束区域,规定爬虫只爬取这个域名下的网页,不存在的URL会被忽略。
start_urls = [ ] :爬取的URL元祖/列表。爬虫从这里开始抓取数据,所以,第一次下载的数据将会从这些urls开始。其他子URL将会从这些起始URL中继承性生成。
parse(self, response) :解析的方法,每个初始URL完成下载后将被调用,调用的时候传入从每一个URL传回的Response对象来作为唯一参数,主要作用如下:
将start_urls的值修改为需要爬取的第一个url
start_urls = ["http://www.itcast.cn/channel/teacher.shtml"]
2. 提取数据 extract() 方法和extract_first()方法
scrapy框架中 response.xpath() 返回的是一个含有selector对象的列表
names = response.xpath("//div[@class='tea_con']//h3/text()") # 返回一个含有selector对象的列表
scrapy框架中 extract() 方法提取文字
names = response.xpath("//div[@class='tea_con']//h3/text()").extract() # 使用 extract() 方法取到文字列表
scrapy框架中 extract_first() 取列表第一个元素 如果没有返回None
item["name"] = li.xpath(".//h3/text()").extract_first() # 相当于item["name"] = li.xpath(".//h3/text()")[0].extract() if len(li.xpath(".//h3/text()")) > 0 else None
scrapy框架—spiders相关推荐
- Scrapy框架----- Spiders
Spider Spider类定义了如何爬取某个(或某些)网站.包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item). 换句话说,Spider就是您定义爬取的动作及 ...
- scrapy 框架抓取艺龙酒店(热门城市酒店信息)
一.scrapy框架 Spiders文件- Yi_long.py import requests import re import time import jsonclass Yi_long():de ...
- python爬虫之Scrapy框架的post请求和核心组件的工作 流程
python爬虫之Scrapy框架的post请求和核心组件的工作 流程 一 Scrapy的post请求的实现 在爬虫文件中的爬虫类继承了Spider父类中的start_urls,该方法就可以对star ...
- Scrapy框架中的crawlspider爬虫
1 crawlspider是什么 在spider中要寻找下一页的url地址或者内容的url地址,想想是否有简单的方法省略寻找url的过程? 思路: 从response中提取所有的满足规则的url地址 ...
- 爬虫基础分享Scrapy框架流程图与安装
从头开发一个爬虫程序是一项烦琐的工作,为了避免因制造轮子而消耗大量时间,在实际应用中我们可以选择使用一些优秀的爬虫框架,使用框架可以降低开发成本,提高程序质量,让我们能够专注于业务逻辑.所以,我们一起 ...
- python 爬虫 学习笔记(一)Scrapy框架入门
沉迷于通过高效算法及经典数据结构来优化程序的时候并不理解,为什么多线程可以优化爬虫运行速度?原来是程序特性所决定的:传统算法的程序复杂度主要来源于计算,但网络程序的计算时间可以忽略不计,网络程序所面临 ...
- python scrapy框架基如何实现多线程_【转】爬虫的一般方法、异步、并发与框架scrapy的效率比较...
问题的由来 我们的需求为爬取红色框框内的名人(有500条记录,图片只展示了一部分)的 名字以及其介绍,关于其介绍,点击该名人的名字即可,如下图: 这就意味着我们需要爬取500个这样的页面,即500个H ...
- Scrapy框架基础使用
1.流程框架 2.在命令行中输入scrapy,会有scrapy常见命令参数 在命令中输入scrapy startproject quote创建一个叫quote的项目 cd到创建好的项目目录中,然后执行 ...
- scrapy框架_Scrapy框架学习---Scrapy介绍(一)
Scrapy 框架 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页 ...
- Python爬虫从入门到放弃(十二)之 Scrapy框架的架构和原理
原文地址https://www.cnblogs.com/zhaof/p/7173397.html 这一篇文章主要是为了对scrapy框架的工作流程以及各个组件功能的介绍 Scrapy目前已经可以很好的 ...
最新文章
- CVPR 2021 顶会冠军带你解密图像分割
- memcache redis
- 6.1 C/S 架构介绍
- 感恩八年 — 致CSDN (感谢有你)
- python语言能够整合各类程序代码-python语言概述
- 移动开发框架,第【一】弹:QuoJs 官方文档(汉化版)
- 网络基础:ACL访问控制例表
- maven 国内私服
- Python笔记(2) Python基础
- cmd对应linux sleep命令,linux sleep命令参数及用法详解(linux休眠延迟执行命令)
- 60、剑指offer--把二叉树打印成多行
- Nginx+tomcat整合
- 小学计算机键盘的初步认识教案,教学设计——小小键盘真神奇
- 时钟和数据恢复(CDR)电路原理——基于PLL
- ASP.NET MVC入门视频教程
- 游戏编程模式 - 观察者模式
- python培训班价格-少儿编程培训机构哪家好,儿童编程价格多少钱?家长知多少...
- bootstrapCDN地址
- 快速接入百度地图定位、描点
- 我允许失败,但是我不允许不努力!
热门文章
- GoFW|网页加速器
- 成绩排序(一)c++
- 安装完固态硬盘后计算机里没显示,安装了双硬盘电脑却不显示新硬盘怎么办
- 论文分享Why Do Adversarial Attacks Transfer? Explaining Transferability of Evasion and Poisoning Attacks
- java 批量生成条形码,打包zip(springboot)
- 三层交换机和三层交换实验
- 多智能体系统的分布式协同控制——采样控制、脉冲控制、弹性控制
- vue大屏项目开发框架dataV
- Xilinx XC7Z020双核ARM+FPGA开发板试用合集——硬件赏析
- import requests