scrapy基本使用(二)

参考链接: http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html#id5

scrapy基本使用(一) http://www.cnblogs.com/zhaijiahui/p/6973858.html

了解一些基础,接下来我们该从源码里,扒出你想要的东西了。

这里就要用到一个叫选择器(Selectors)的东西了。

首先思考几个问题:

1)选择器的作用是什么?

从网页源码中提取出想要的数据。我理解python中的re,BeautifulSoup作用类似。

2)选择器如何工作?

用的是XPath,在xml和html上的节点语言,什么是节点语言?我理解这里就是在匹配一个个标签<div>,<a>,<span>等等,这样匹配的效率更高更准确。

下面是如何使用选择器

3)如何使用选择器?

3.1 官方的使用方法

from scrapy.selector import Selector

这样只需要调用Selector(response)就等价于scrapy.selector.Selector(response)

3.2 如何使用XPath来匹配内容呢?

举个例子:

body = '<html><body><span>good</span></body></html>'

Selector(text=body).xpath('//span/text()').extract()

注意到我们要找的内容在<span>标签里面,可以用//span/来定位,而我们要获取标签里面包裹的内容,用text()来获取。

而前面.xpath() 及 .css() 方法返回的是一个类 SelectorList 的实例, 它是一个新选择器的列表。需要调用extract()最后成功获取good。

response.xpath('//title/text()').extract() 等价于 response.css('title::text').extract()

当源码是这种情况的时候,

<a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a>

xpath用法:

>>> response.xpath('//a[contains(@href, "image")]/@href').extract()
[u'image1.html',
u'image2.html',
u'image3.html',
u'image4.html',
u'image5.html']

contains代表href里面包含”image”的内容,最后还需要@href确定取得是href的内容

css用法:

>>> response.css('a[href*=image]::attr(href)').extract()
[u'image1.html',
u'image2.html',
u'image3.html',
u'image4.html',
u'image5.html']

当我们像这样把数据都挑出来以后

    def parse(self, response):
for sel in response.xpath('//ul/li'):
item = DmozItem()
item['title'] = sel.xpath('a/text()').extract()
item['link'] = sel.xpath('a/@href').extract()
item['desc'] = sel.xpath('text()').extract()
yield item

最后获取数据需要用 yield

yield是一个生成器,他可以记录调用之前的数据信息(各个参数的值),和位置信息(在框架中跳转以后依然能回来执行),而上次调用的所有局部变量都保持不变。

可以参考:Python yield 用法 http://www.pythonclub.org/python-basic/yield

保存爬取到的数据

scrapy crawl dmoz -o items.json

该命令将采用 JSON 格式对爬取的数据进行序列化,生成 items.json 文件。

在类似本篇教程里这样小规模的项目中,这种存储方式已经足够。 如果需要对爬取到的item做更多更为复杂的操作,您可以编写 Item Pipeline 。

scrapy基本使用(二)的更多相关文章

  1. scrapy框架(二)

    scrapy框架(二) 一.scrapy 选择器 概述: Scrapy提供基于lxml库的解析机制,它们被称为选择器. 因为,它们“选择”由XPath或CSS表达式指定的HTML文档的某部分. Sca ...

  2. Scrapy 框架(二)数据的持久化

    scrapy数据的持久化(将数据保存到数据库) 一.建立项目 1.scrapy startproject dushu 2.进入项目 cd dushu 执行:scrapy genspider -t cr ...

  3. Python爬虫框架Scrapy实例(二)

    目标任务:使用Scrapy框架爬取新浪网导航页所有大类.小类.小类里的子链接.以及子链接页面的新闻内容,最后保存到本地. 大类小类如下图所示: 点击国内这个小类,进入页面后效果如下图(部分截图): 查 ...

  4. scrapy爬虫笔记(二)------交互式爬取

    开始网页爬取:(1)交互式爬取 首先,我们使用scrapy建立起爬虫的框架.在命令行中输入 scrapy shell “url” 如:scrapy shell “http://www.baidu.co ...

  5. 浅谈 Scrapy 爬虫(二)

    越写越像官方文档的翻译,偏离了初衷.写一些官方文档里没有的内容吧.   在不限制宽带的环境下,根据页面的大小, Scrapy 一秒能爬取40-70个页面,一天在400万到600万页面.也就是说 Scr ...

  6. Scrapy基础(二)————Scrapy的安装和目录结构

    Scrapy安装: 1,首先进入虚拟环境    2,使用国内豆瓣源进行安装,快! pip install -i https://pypi.douban.com/simple/ scrapy 3,特殊情 ...

  7. scrapy系列(二)——startproject、genspider创建项目与模板使用

    阅读本文之前需要安装scrapy,如果你还没有安装该框架,那么可以看之前一篇文章scrapy1.2windows安装. 现在默认大家都已经成功的安装了scrapy可以开始大展身手了.本文主要讲的是新建 ...

  8. Python3爬虫(十八) Scrapy框架(二)

    对Scrapy框架(一)的补充 Infi-chu: http://www.cnblogs.com/Infi-chu/ Scrapy优点:    提供了内置的 HTTP 缓存 ,以加速本地开发 .   ...

  9. Scrapy 笔记(二)

    一个scrapy爬虫知乎项目的笔记 1.通过命令创建项目 scrapy startproject zhihucd zhihuscrapy genspider zhihu www.zhihu.com(临 ...

  10. 爬虫框架Scrapy之案例二

    新浪网分类资讯爬虫 爬取新浪网导航页所有下所有大类.小类.小类里的子链接,以及子链接页面的新闻内容. 效果演示图: items.py import scrapy import sys reload(s ...

随机推荐

  1. vmstat命令详解

    一:简介 vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存.进程.CPU活动进行监控.他是对系统的整体情况进行统计,不足之处是无法对某个 ...

  2. rabbitMQ 3.6.15生产环境

    服务器配置 系统环境:CentOS 7 由于RabbitMQ依赖erlang, 所以需要先安装erlang 下载erlang 下载地址 http://erlang.org/download/ linu ...

  3. springboot定时任务处理

    定时任务是一种很常见的应用场景,springboot中的定时任务完全用的spring的那一套,用起来比较简单,需要注意的是线程池配置的那一块 使用 @EnableScheduling 注解就可以开启定 ...

  4. SQL Server 表值函数

    表值函数还是很有意思的,我现在想实现一个功能.就是我查询出来的内容,我要对结果进行再次查询,也要输入参数,我想了想 1.存储过程  不能对执行后的结果进行再次查询,需要创建临时表,太麻烦 2.视图  ...

  5. Selenium模块的使用

    Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上,它支持所有主流的浏 ...

  6. "Error 0162 - Setup data integrity check failure" after updating BIOS via Thinkvantage

    Start the computer and start pressing F1 and get into set up. In setup press F9 for default settings ...

  7. sql递归查询 根据Id查所有子结点

    Declare @Id Int Set @Id = 0; ---在此修改父节点 With RootNodeCTE(D_ID,D_FatherID,D_Name,lv) As ( Select D_ID ...

  8. lucene相关

    lucene相关: 应用领域: 互联网全文检索引擎(比如百度,  谷歌,  必应) 站内全文检索引擎(淘宝, 京东搜索功能) 优化数据库查询(因为数据库中使用like关键字是全表扫描也就是顺序扫描算法 ...

  9. [Android] Android : lambda expressions are not supported at this language level(需设置project language level)

    最近在Github上下载一个别人的开源项目 ,里面用到了Javajdk1.8的新特性:Lambda 表达式.而我用的Android studio发现不能用这个Lambda 表达式. 本地环境: And ...

  10. 指定so动态链接库连接器

    在学习x86_64汇编时, 发现一旦使用glibc库函数, 如printf时, 一般是需要使用为ld传递命令行参数-lc来动态连接libc.so的, 但是, 生成的可执行文件却无法运行: 气煞我也! ...