scrapy 的三个入门应用场景
说明:
本文参照了官网的 dmoz 爬虫例子。
不过这个例子有些年头了,而 dmoz.org 的网页结构已经不同以前。所以我对xpath
也相应地进行了修改。
概要:
本文提出了scrapy 的三个入门应用场景
- 爬取单页
- 根据目录页面,爬取所有指向的页面
- 爬取第一页,然后根据第一页的连接,再爬取下一页...。依此,直到结束
对于场景二、场景三可以认为都属于:链接跟随(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 的三个入门应用场景相关推荐
- Python:Scrapy的安装和入门案例
Scrapy的安装介绍 Scrapy框架官方网址:http://doc.scrapy.org/en/latest Scrapy中文维护站点:http://scrapy-chs.readthedocs. ...
- 三分钟入门大数据之用户画像标签的分类
哈喽,大家好,我是汉斯老师.近几年来,互联网行业由于较高的薪资收入,受到许多人的追捧.很多年轻的学子,或是其他行业的有志青年,都想要投身到这个行业中来.然而一方面受到"互联网寒冬" ...
- (三)webpack入门——webpack功能集合的demo
ErduYang 自律的人生才自由 博客园 首页 新随笔 联系 订阅 管理 随笔 - 37文章 - 0评论 - 8 (三)webpack入门--webpack功能集合的demo 此篇文章来源于http ...
- python 三分钟入门_Cython 三分钟入门教程
作者:perrygeo 译者:赖勇浩(http://laiyonghao.com) 原文:http://www.perrygeo.net/wordpress/?p=116 我最喜欢的是Python,它 ...
- 米筐量化不支持c语言_AQ答疑:三分钟入门量化投资
答疑丨量化投资三分钟入门(一) 量化投资在国外的发展已经有很长时间的历史,虽然国内市场目前仍处于初起阶段,但是因其投资业绩稳定,市场规模和份额不断扩大,得到了越来越多投资人的认可,各个大型券商也在发展 ...
- 学习平面设计的三个入门步骤
学习平面设计的三个入门步骤 设计的学习可能有很多不同的路,由于这是有设计的多元化学问构造决议的,不论你以前是做什么的`,不论你曾经如何如何,在进入设计范畴之后,你以前的阅历都将影响你,你都将面临应战与 ...
- 牛客网SQL大厂真题二刷小白白话总结(三)电商场景(某东商城)
三.电商场景(某东商城) 目录 SQL13 计算商城中2021年每月的GMV(简单) SQL14 统计2021年10月每个退货率不大于0.5的商品各项指标(中等) SQL15 某店铺的各商品毛利率及店 ...
- 三天入门Python---基本语法(第一天)
序言 本文作为三天入门Python的第一篇,先来个序言: 为什么写这样的文章,Python作为当下一个热门流行的语言,以及其在深度学习框架中的广泛应用,已经严重影响到了我的学习与工作,尤其是一个想要入 ...
- 【算法笔记题解】《算法笔记知识点记录》第三章——入门模拟1——简单模拟
如果喜欢大家还希望给个收藏点赞呀0.0 相关知识点大家没基础的还是要看一下的,链接: <算法笔记知识点记录>第三章--入门模拟 由于放原题的话文章实在太长,所以题多的话我只放思路和题解,大 ...
最新文章
- WIN7下的VS2008在调试OpenCV_2.3.1的程序时报错丢失tbb_debug.dll的解决办法~
- lazarus开发android应用程序指南,Lazarus开发Android应用程序指南(2)
- Spring+IOC(DI)+AOP概念及优缺点
- 使用sklearn进行数据挖掘
- 你必须要找到你所爱的东西
- VirtualBox是什么
- oracle免安装和安装版区别,Oracle免安装客户端
- 百度热力图颜色说明_千变万化的热力图,总有一款适合你!
- Android补间动画原理介绍
- Oracle 中LONG RAW BLOB CLOB类型介绍
- 云浮高考成绩查询2021,云浮市2021年高考顺利落幕!
- 深入浅出mybatis分页
- 江理工单片机实训(自动窗帘模拟控制系统)
- 二级域名 文件服务器,自建DNS服务器使用二级域名转发内网服务器
- 2006年F1第一站巴林
- Java RSA加密解密
- 微信消息模板申请攻略
- 使用quartus13.0烧录文件
- 老罗抖音推荐EcoFlow正浩户外电源,小众科技为何被选中?
- void* shu_zu_ming[n][m] 传参的函数定义写法 【C++】