先上代码:

import scrapy
from scrapy.selector import Selector class QuoteSpider(scrapy.Spider):
name = "quotes"
start_urls = [
"http://quotes.toscrape.com/"
] def parse(self, response):
quotes = response.xpath("//div[@class='quote']")
for quote in quotes:
print(quote.xpath("//span[@class='text']/text()").extract_first())

再看看网页的结构

 
xpath-html.jpeg

我们自然想当然的以为,第一步xpath,将包含quote的所有div都找出来,然后遍历每一个div,再到每一个div中找到quote,这样打印出来的应该是当前页面所有的quote。Try it。

你会发现打印出来的都是第一个div里面的quote,这就是坑了。
我来试着解释一下,当前的代码处理xpath是分段处理了的,只要没有extract或者extract_first,xptah的处理都是一个整体,也就是说,循环里面的处理实际上是连接了上面的xpath处理,所以处理对象是整个response,这样每次取得就是第一条数据,那么如何实现我们想要的那种处理方式呢,先将xpath的数据extract出来,这样就是固定的区域了,然后再包装成Selector对象进行xpath处理,代码如下:

import scrapy
from scrapy.selector import Selector class QuoteSpider(scrapy.Spider):
name = "quotes"
start_urls = [
"http://quotes.toscrape.com/"
] def parse(self, response):
quotes = response.xpath("//div[@class='quote']").extract()
for quote in quotes:
print(Selector(text=quote).xpath("//span[@class='text']/text()").extract_first())

That's it.

作者:编程随想
链接:https://www.jianshu.com/p/e56e94e387f9
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

最新文章

  1. Odoo PDF 取消Header后 空白处理
  2. mysql日志与备份恢复
  3. 【转】sql server获取数据库名,表明,表结构
  4. centos安装php扩展
  5. Java学习笔记(六)——方法
  6. Codeforces Round #379 (Div. 2) D. Anton and Chess 水题
  7. iis错误记录
  8. CocoStudio基础教程(6)使用CocoStudio编辑帧事件并关联到程序
  9. Hook to function
  10. 机器学习技法-GBDT算法
  11. [cocos2d-js]长按按钮事件
  12. Centos(Linux) 根文件系统
  13. Altium查看所有快捷键,图文教程
  14. 基于visual Studio2013解决面试题之0403串联字符串
  15. ZOJ Problem Set - 2563 Long Dominoes 【如压力dp】
  16. 【转】怎么导出jar包
  17. 用C++实现的八皇后问题
  18. JavaWeb之DBUtils
  19. Android开发学习之路--图表实现(achartengine/MPAndroidChart)之初体验
  20. Win10环境配置Bitcoin Core节点

热门文章

  1. hadoop安装和环境配置---1
  2. 一百二十二:CMS系统之页面抽离和登录页面
  3. —Entity Framework实例详解
  4. iis管理器的程序应用池中没有Asp.NET v4.0
  5. vue计算属性VS侦听属性
  6. Chrome F12 谷歌开发者工具解析
  7. ASP.NET Core 入门笔记7,ASP.NET Core MVC 视图布局入门
  8. Metasploit-初篇
  9. 如何在picture上显示透明Label
  10. Cookie中的httponly的属性和作用