scrapy基本使用(二)
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基本使用(二)的更多相关文章
- scrapy框架(二)
scrapy框架(二) 一.scrapy 选择器 概述: Scrapy提供基于lxml库的解析机制,它们被称为选择器. 因为,它们“选择”由XPath或CSS表达式指定的HTML文档的某部分. Sca ...
- Scrapy 框架(二)数据的持久化
scrapy数据的持久化(将数据保存到数据库) 一.建立项目 1.scrapy startproject dushu 2.进入项目 cd dushu 执行:scrapy genspider -t cr ...
- Python爬虫框架Scrapy实例(二)
目标任务:使用Scrapy框架爬取新浪网导航页所有大类.小类.小类里的子链接.以及子链接页面的新闻内容,最后保存到本地. 大类小类如下图所示: 点击国内这个小类,进入页面后效果如下图(部分截图): 查 ...
- scrapy爬虫笔记(二)------交互式爬取
开始网页爬取:(1)交互式爬取 首先,我们使用scrapy建立起爬虫的框架.在命令行中输入 scrapy shell “url” 如:scrapy shell “http://www.baidu.co ...
- 浅谈 Scrapy 爬虫(二)
越写越像官方文档的翻译,偏离了初衷.写一些官方文档里没有的内容吧. 在不限制宽带的环境下,根据页面的大小, Scrapy 一秒能爬取40-70个页面,一天在400万到600万页面.也就是说 Scr ...
- Scrapy基础(二)————Scrapy的安装和目录结构
Scrapy安装: 1,首先进入虚拟环境 2,使用国内豆瓣源进行安装,快! pip install -i https://pypi.douban.com/simple/ scrapy 3,特殊情 ...
- scrapy系列(二)——startproject、genspider创建项目与模板使用
阅读本文之前需要安装scrapy,如果你还没有安装该框架,那么可以看之前一篇文章scrapy1.2windows安装. 现在默认大家都已经成功的安装了scrapy可以开始大展身手了.本文主要讲的是新建 ...
- Python3爬虫(十八) Scrapy框架(二)
对Scrapy框架(一)的补充 Infi-chu: http://www.cnblogs.com/Infi-chu/ Scrapy优点: 提供了内置的 HTTP 缓存 ,以加速本地开发 . ...
- Scrapy 笔记(二)
一个scrapy爬虫知乎项目的笔记 1.通过命令创建项目 scrapy startproject zhihucd zhihuscrapy genspider zhihu www.zhihu.com(临 ...
- 爬虫框架Scrapy之案例二
新浪网分类资讯爬虫 爬取新浪网导航页所有下所有大类.小类.小类里的子链接,以及子链接页面的新闻内容. 效果演示图: items.py import scrapy import sys reload(s ...
随机推荐
- Serlect的笔记二(request 、 ersponse)
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象. 下面这两个对象的基本理解: 一.HttpServletRequ ...
- 数据库日志redo和undo
数据库的ACID属性 Atomicity:原子性,以事物transact为最小单位,事物中的所有操作,要么都执行完,要么都不执行,不存在一部分操作执行,另一部分操作不执行的情况. Consistenc ...
- 互联网运营+SEO:推荐必看的5本书籍
本文首发于:风云社区(scoee.com) 最近开始学习和研究互联网运营和SEO,对于我这个小白来讲,还是有些吃力,毕竟从来没接触这方面的,尽管在之前的软件公司做过售前和产品相关的工作,但毕竟与互联网 ...
- root登陆欢迎界面设置
root登陆欢迎界面设置 #!/bin/bash echo -ne "\033[0;36m" cat<<EOF _oo0oo_ (| -_- |) \ = / ___/ ...
- 为SNP增加种族人群频率
一.Ensemble:http://www.ensembl.info/2015/06/18/1000-genomes-phase-3-frequencies-genotypes-and-ld-data ...
- 从LIst集合中安全的删除元素
package cn.rocker.list; import java.util.ArrayList; import java.util.Iterator; import java.util.List ...
- 面向对象【day08】:异常处理(六)
本节内容 1.概述 2.异常梳理 3.异常梳理流程图 4.异常大全 5.自定义异常 一.概述 异常处理是当程序出错了,但是我们又不想让用户看到这个错误,而且我在写程序的时候已经预料到了它可以出现这样的 ...
- vscode 配置踩坑记
vscode-easy-less 遇到问题最好的解决方式是看官网文档,切记!!! 在web开发当中,经常会写less然后编译成css,当然在VS Code当中也有这样的插件(EasyLess), 但是 ...
- SqlServer中的事务使用
一.事务的概念和特点 事务(transaction)是恢复和并发控制的基本单位. 事务的特点 原子性:事务是一个工作单元,要都成功,要么的失败 例子:A付款给B,A余额-100,B余额+100,只能都 ...
- 【转】Linux C下非特定波特率的配置和使用
https://blog.csdn.net/jinhongdu/article/details/43413071 对于非标准的任意波特率需要用ioctl(fd, TIOCGSERIAL, p)和i ...