安装scrapy

不同操作系统安装操作不同,可以直接看官方文档Install Scrapy

创建一个项目

在命令行输入

scrapy startproject tutorial

进入项目目录创建一个spider

cd tutorial
scrapy genspider quotes domain.com
import scrapyclass QuotesSpider(scrapy.Spider):name = "quotes"def start_requests(self):urls = ['http://quotes.toscrape.com/page/1/','http://quotes.toscrape.com/page/2/',]for url in urls:yield scrapy.Request(url=url, callback=self.parse)def parse(self, response):page = response.url.split("/")[-2]filename = 'quotes-%s.html' % pagewith open(filename, 'wb') as f:f.write(response.body)self.log('Saved file %s' % filename)

运行scrapy,在项目顶级目录下输入命令

scrapy crawl quotes

在QuotesSpider这个类里,name指明spider的名称,在start_requests函数里发出请求,用parse函数处理请求返回的结果,start_requests函数可以替换为start_urls列表,scrapy会自动帮我们发出请求,并默认用parse函数处理,还可以设置一些其它参数,详见Document

选择器用法

scrapy内置css选择器和xpath选择器,当然你也可以选择使用其他的解析库,比如BeautifulSoup,我们简单用scrapy shell展示一下scrapy内置选择器的用法,在命令行中输入

scrapy shell https://docs.scrapy.org/en/latest/_static/selectors-sample1.html

示例代码

<html><head><base href='http://example.com/' /><title>Example website</title></head><body><div id='images'><a href='image1.html'>Name: My image 1 <br /><img src='image1_thumb.jpg' /></a><a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a><a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a><a href='image4.html'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a><a href='image5.html'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a></div></body>
</html>
# 获取标题
# selector可以去掉
# extract返回的是列表
response.selector.xpath('//title/text()').extract_first()
response.selector.css('title::text').extract_first()# 获取a标签里href参数内容
response.xpath('//a/@href').extract()
response.css('a::attr(href)').extract()# 混合获取img标签的src属性
response.xpath('//div[@id="images"]').css('img::attr(src)').extract()# 获取a标签中包含image的href属性
response.xpath('//a[contains(@href, "image")]/@href').extract()
response.css('a[href*=image]::attr(href)').extract()# 使用正则表达式
response.css('a::text').re('Name\:(.*)')
response.css('a::text').re_first('Name\:(.*)')# 添加default参数指定默认提取信息
response.css('aa').extract_first(default='')

Item Pipeline用法

通过parse处理函数返回的Item可以用Item Pipeline进行加工处理,主要是数据清洗,格式化。

# 过滤掉相同的itemclass DuplicatePipeline(object):def __init__(self):self.items = set()def process_item(self, item, spider):if item['id'] in self.items:raise DropItem('Duplicate item found: %s' % item['id'])else:self.items.add(item['id'])return item

需要在settings里的注册一下自定义的Pipeline

ITEM_PIPELINES = {'tutorial.pipelines.TutorialPipeline': 300,'tutorial.pipelines.DuplicatePipeline': 200,
}

数字越小,优先级越高

Scrapy基本用法相关推荐

  1. Python爬虫扩展库scrapy选择器用法入门(一)

    关于BeutifulSoup4的用法入门请参考Python爬虫扩展库BeautifulSoup4用法精要,scrapy爬虫案例请参考Python使用Scrapy爬虫框架爬取天涯社区小说"大宗 ...

  2. scrapy shell 用法(慢慢更新...)

    scrapy shell 命令 1.scrapy shell url #url指你所需要爬的网址 2.有些网址数据的爬取需要user-agent,scrapy shell中可以直接添加头文件, 第①种 ...

  3. 【数据分析】干货!一文教会你 Scrapy 爬虫框架的基本使用

    出品:Python数据之道 (ID:PyDataLab) 作者:叶庭云 编辑:Lemon 一.scrapy 爬虫框架介绍 在编写爬虫的时候,如果我们使用 requests.aiohttp 等库,需要从 ...

  4. 第41讲:Scrapy框架的介绍

    在前面编写爬虫的时候,如果我们使用 requests.aiohttp 等库,需要从头至尾把爬虫完整地实现一遍,比如说异常处理.爬取调度等,如果写的多了,的确会比较麻烦. 那么有没有什么办法可以提升我们 ...

  5. 在scrapy中parse函数里面xpath的内容打印不出来_如何正确的使用Scrapy ?

    本节是 <Python爬虫从入门到进阶>课程中的一节,课程购买链接(PC访问需要微信扫码) ,目前已更新80% 课程 购买课程请扫码: Scrapy是一个为了爬取网站数据,提取结构性数据而 ...

  6. 手把手教你使用Python+scrapy爬取山东各城市天气预报

    1.在命令提示符环境使用pip install scrapy命令安装Python扩展库scrapy,详见Python使用Scrapy爬虫框架爬取天涯社区小说"大宗师"全文 2.使用 ...

  7. 章节十四:Scrapy框架

    章节十四:Scrapy框架 目录 章节十四:Scrapy框架 1. Scrapy是什么 1.1 Scrapy的结构 1.2 Scrapy的工作原理 2. Scrapy的用法 2.1 明确目标与分析过程 ...

  8. Python爬虫第十课:Scrapy框架(1)

    前面的关卡中,我们学习了如何用协程来提升爬虫的速度,并且通过项目实操,将协程运用于抓取HI运动的食物数据. 不知道你会不会有这样一种感觉:要写出一个完整的爬虫程序需要做很多琐碎的工作.比如,要针对不同 ...

  9. 13 Scrapy框架介绍

    # Author:Nimo_Ding''' 练习 - 当当图书榜单爬虫 前两关,我们学习了能提升爬虫速度的进阶知识--协程,并且通过项目实操,将协程运用于抓取薄荷网的食物数据. 可能你在体验开发一个爬 ...

最新文章

  1. Windows环境下smarty安装简明教程
  2. Git 源码禁止使用 C 标准库中容易被错用的函数
  3. linux下文件系统创建
  4. [转帖]我们是OIer、
  5. xsemaphoretake返回_FreeRTOS例程3-串口中断接收不定长的数据与二值信号量的使用
  6. Apache Wicket 1.5发布
  7. 怎么安装mysql5.6.19_centos6.5 rpm安装mysql5.6.19操作及步骤
  8. Translation 谷歌翻译失效问题
  9. 程序员考证书,有用吗?
  10. 超声B mode聚焦成像仿真(ultrasound B mode fcous imaging simulation)
  11. 初中数学抽象教学的案例_初中数学教学案例与反思
  12. linux PWM驱动屏幕亮度及pwm子系统框架(Linux驱动开发篇)
  13. 将一个类中的字段赋值到另一个类同名同类型字段
  14. Python小炼(1):初识Python
  15. 刷机案例-----谷歌pixel系列机型刷写系统的一些问题解析
  16. 提示找不到 XXX.dll 解决方法
  17. ctf web shell
  18. 2021-11-07交通仿真数据准备
  19. 瑞熙贝通|实验室信息化管理系统|LIMS实验室管理系统功能详解
  20. vscode设置全局编码方式

热门文章

  1. SQL With As 用法Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介
  2. 2017.10.8 软件工程----总体设计
  3. H3 BPM微信接入配置
  4. echarts 表格与 div 之间 空白的设置
  5. titanium开发教程-04-11其他属性和方法
  6. 控制文字长度,多出的文字用省略号代替
  7. 谷歌浏览器linux版_Chrome apps 要被谷歌干掉了
  8. Docker阿里云镜像存储服务
  9. hdu4885 有 限制的最短路
  10. hdu2594 简单KMP