说明
本文参照了官网的 dmoz 爬虫例子。

不过这个例子有些年头了,而 dmoz.org 的网页结构已经不同以前。所以我对xpath也相应地进行了修改

概要
本文提出了scrapy 的三个入门应用场景

  1. 爬取单页
  2. 根据目录页面,爬取所有指向的页面
  3. 爬取第一页,然后根据第一页的连接,再爬取下一页...。依此,直到结束

对于场景二、场景三可以认为都属于:链接跟随(Following links)

链接跟随的特点就是:在 parse 函数结束时,必须 yield 一个带回调函数 callback 的 Request 类的实例

本文基于:windows 7 (64) + python 3.5 (64) + scrapy 1.2

场景一

描述

爬取单页内容

示例代码

import scrapyfrom tutorial.items import DmozItemclass DmozSpider(scrapy.Spider):name = "dmoz"allowed_domains = ["dmoz.org"]start_urls = ["http://www.dmoz.org/Computers/Programming/Languages/Python/Books/","http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"]def parse(self, response):        for div in response.xpath('//div[@class="title-and-desc"]'):item = DmozItem()item['title'] = div.xpath('a/div/text()').extract_first().strip()item['link'] = div.xpath('a/@href').extract_first()item['desc'] = div.xpath('div[@class="site-descr "]/text()').extract_first().strip()yield item

场景二

描述

  • ①进入目录,提取连接。
  • ②然后爬取连接指向的页面的内容
    其中①的yield scrapy.Request的callback指向②

官网描述:

...extract the links for the pages you are interested, follow them and then extract the data you want for all of them.

示例代码

import scrapyfrom tutorial.items import DmozItemclass DmozSpider(scrapy.Spider):name = "dmoz"allowed_domains = ["dmoz.org"]start_urls = ['http://www.dmoz.org/Computers/Programming/Languages/Python/' # 这是目录页面]def parse(self, response):for a in response.xpath('//section[@id="subcategories-section"]//div[@class="cat-item"]/a'):url = response.urljoin(a.xpath('@href').extract_first().split('/')[-2])yield scrapy.Request(url, callback=self.parse_dir_contents)def parse_dir_contents(self, response):for div in response.xpath('//div[@class="title-and-desc"]'):item = DmozItem()item['title'] = div.xpath('a/div/text()').extract_first().strip()item['link'] = div.xpath('a/@href').extract_first()item['desc'] = div.xpath('div[@class="site-descr "]/text()').extract_first().strip()yield item

场景三

描述

  • ①进入页面,爬取内容,并提取下一页的连接。
  • ②然后爬取下一页连接指向的页面的内容
    其中①的yield scrapy.Request的callback指向①自己

官网描述:

A common pattern is a callback method that extracts some items, looks for a link to follow to the next page and then yields a Request with the same callback for it

示例代码

import scrapyfrom myproject.items import MyItemclass MySpider(scrapy.Spider):name = 'example.com'allowed_domains = ['example.com']start_urls = ['http://www.example.com/1.html','http://www.example.com/2.html','http://www.example.com/3.html',]def parse(self, response):for h3 in response.xpath('//h3').extract():yield MyItem(title=h3)for url in response.xpath('//a/@href').extract():yield scrapy.Request(url, callback=self.parse)

说明
第三个场景未测试!

本文转自罗兵博客园博客,原文链接:http://www.cnblogs.com/hhh5460/p/5821501.html,如需转载请自行联系原作者

scrapy 的三个入门应用场景相关推荐

  1. Python:Scrapy的安装和入门案例

    Scrapy的安装介绍 Scrapy框架官方网址:http://doc.scrapy.org/en/latest Scrapy中文维护站点:http://scrapy-chs.readthedocs. ...

  2. 三分钟入门大数据之用户画像标签的分类

    哈喽,大家好,我是汉斯老师.近几年来,互联网行业由于较高的薪资收入,受到许多人的追捧.很多年轻的学子,或是其他行业的有志青年,都想要投身到这个行业中来.然而一方面受到"互联网寒冬" ...

  3. (三)webpack入门——webpack功能集合的demo

    ErduYang 自律的人生才自由 博客园 首页 新随笔 联系 订阅 管理 随笔 - 37文章 - 0评论 - 8 (三)webpack入门--webpack功能集合的demo 此篇文章来源于http ...

  4. python 三分钟入门_Cython 三分钟入门教程

    作者:perrygeo 译者:赖勇浩(http://laiyonghao.com) 原文:http://www.perrygeo.net/wordpress/?p=116 我最喜欢的是Python,它 ...

  5. 米筐量化不支持c语言_AQ答疑:三分钟入门量化投资

    答疑丨量化投资三分钟入门(一) 量化投资在国外的发展已经有很长时间的历史,虽然国内市场目前仍处于初起阶段,但是因其投资业绩稳定,市场规模和份额不断扩大,得到了越来越多投资人的认可,各个大型券商也在发展 ...

  6. 学习平面设计的三个入门步骤

    学习平面设计的三个入门步骤 设计的学习可能有很多不同的路,由于这是有设计的多元化学问构造决议的,不论你以前是做什么的`,不论你曾经如何如何,在进入设计范畴之后,你以前的阅历都将影响你,你都将面临应战与 ...

  7. 牛客网SQL大厂真题二刷小白白话总结(三)电商场景(某东商城)

    三.电商场景(某东商城) 目录 SQL13 计算商城中2021年每月的GMV(简单) SQL14 统计2021年10月每个退货率不大于0.5的商品各项指标(中等) SQL15 某店铺的各商品毛利率及店 ...

  8. 三天入门Python---基本语法(第一天)

    序言 本文作为三天入门Python的第一篇,先来个序言: 为什么写这样的文章,Python作为当下一个热门流行的语言,以及其在深度学习框架中的广泛应用,已经严重影响到了我的学习与工作,尤其是一个想要入 ...

  9. 【算法笔记题解】《算法笔记知识点记录》第三章——入门模拟1——简单模拟

    如果喜欢大家还希望给个收藏点赞呀0.0 相关知识点大家没基础的还是要看一下的,链接: <算法笔记知识点记录>第三章--入门模拟 由于放原题的话文章实在太长,所以题多的话我只放思路和题解,大 ...

最新文章

  1. WIN7下的VS2008在调试OpenCV_2.3.1的程序时报错丢失tbb_debug.dll的解决办法~
  2. lazarus开发android应用程序指南,Lazarus开发Android应用程序指南(2)
  3. Spring+IOC(DI)+AOP概念及优缺点
  4. 使用sklearn进行数据挖掘
  5. 你必须要找到你所爱的东西
  6. VirtualBox是什么
  7. oracle免安装和安装版区别,Oracle免安装客户端
  8. 百度热力图颜色说明_千变万化的热力图,总有一款适合你!
  9. Android补间动画原理介绍
  10. Oracle 中LONG RAW BLOB CLOB类型介绍
  11. 云浮高考成绩查询2021,云浮市2021年高考顺利落幕!
  12. 深入浅出mybatis分页
  13. 江理工单片机实训(自动窗帘模拟控制系统)
  14. 二级域名 文件服务器,自建DNS服务器使用二级域名转发内网服务器
  15. 2006年F1第一站巴林
  16. Java RSA加密解密
  17. 微信消息模板申请攻略
  18. 使用quartus13.0烧录文件
  19. 老罗抖音推荐EcoFlow正浩户外电源,小众科技为何被选中?
  20. void* shu_zu_ming[n][m] 传参的函数定义写法 【C++】

热门文章

  1. dalvik对于JPDA的实现
  2. linux基础—课堂随笔_03 SHELL脚本编程基础
  3. Android Studio常用Plugin及 手动安装 Plugins
  4. Vue—核心概念—异步组件和路由懒加载
  5. Tricentis的测试工具评测
  6. SDNU 1300.转圈游戏(快速幂)
  7. 拍拍贷信贷申请审核竞赛模拟
  8. Chrome 静默打印及其它启动参数
  9. time模块 random模块
  10. 然之协同系统3.5(OA+CRM+CASH+TEAM)