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 ...
随机推荐
- SSH整合redis和MongoDB错误笔记
由于毕设中做的是图片搜索网站,选择前端框用SSH,因为之间接触过SSH框架,略有了解,但没有深究,现在在整合redis和mongodb的过程中遇到很多错误,也是十分痛苦,只能通过百度和一步步尝试着解决 ...
- (注意输入格式)bistuoj(旧)1237 成绩统计
成绩统计 Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal Submit:88 ...
- 谈.Net委托与线程——创建无阻塞的异步调用(一)
前言 本文大部分内容来自于mikeperetz的Asynchronous Method Invocation及本人的一些个人体会所得,希望对你有所帮助.原英文文献可以在codeproject中搜索到. ...
- pt-kill 用法记录
pt-kill 用法记录 # 参考资料Percona-Toolkit系列之pt-kill杀会话利器http://www.fordba.com/percona-toolkit-pt-kill.html ...
- mysql批量插入简单测试数据
mysql批量插入简单测试数据 # 参考网址: https://www.2cto.com/database/201703/618280.html 1.mysql创建测试表 CREATE TABLE ` ...
- CodeForces920E 链表强优化BFS
http://codeforces.com/problemset/problem/920/E 题意:求一个图的补图的连通分量个数以及每个连通分量里的点个数 如果这不是一个补图,BFS或者并查集可过,但 ...
- chrome截图全网页
1.F12 2.ctrl+shift+p 3.输入:capture 4.选择Capture full size screenshot
- 利用jieba,word2vec,LR进行搜狐新闻文本分类
一.简介 1)jieba 中文叫做结巴,是一款中文分词工具,https://github.com/fxsjy/jieba 2)word2vec 单词向量化工具,https://radimrehurek ...
- C++ Random 的使用
1.rand() 方法 rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数. 这样,如果你要产生0~10的10个整数,可以表达为: int N ...
- vue实现简单日历
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...