[Scrapy-6] 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']")
for quote in quotes:
print(quote.xpath("//span[@class='text']/text()").extract_first())
再看看网页的结构

我们自然想当然的以为,第一步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
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
[Scrapy-6] XPath使用的一个坑的更多相关文章
- 使用scrapy中xpath选择器的一个坑点
情景如下: 一个网页下有一个ul,这个ur下有125个li标签,每个li标签下有我们想要的 url 字段(每个 url 是唯一的)和 price 字段,我们现在要访问每个li下的url并在生成的请求中 ...
- scrapy初体验 - 安装遇到的坑及第一个范例
scrapy,python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.scrapy用途广泛,可以用于数据挖掘.监测和自动化测试.scrapy的安装稍 ...
- 利用scrapy和MongoDB来开发一个爬虫
今天我们利用scrapy框架来抓取Stack Overflow里面最新的问题(),并且将这些问题保存到MongoDb当中,直接提供给客户进行查询. 安装 在进行今天的任务之前我们需要安装二个框架,分别 ...
- #0 scrapy爬虫学习中遇到的坑记录
python 基础学习中对于scrapy的使用遇到了一些问题. 首先进行的是对Amazon.cn的检索结果页进行爬取,很顺利,无碍. 下一个目标是对baidu的搜索结果进行爬取 1,反爬虫 1.1 我 ...
- 用html5的视频元素所遇到的第一个坑
html5 有一个video标签,这个是被大家所熟知的事情.按照w3c的规范,我认真的写出如下代码: <video preload="auto" controls=" ...
- 监控jvm的一个坑
监控jvm的一个坑 1,遇到的问题 我按照以往文档,在catalina.sh里追加jvm的监控api,如下 紧接着我启动 tomcat. 未报任何错误. 发现 lsof –i:12000, 12000 ...
- JavaScript中sort方法的一个坑(leetcode 179. Largest Number)
在做 Largest Number 这道题之前,我对 sort 方法的用法是非常自信的.我很清楚不传比较因子的排序会根据元素字典序(字符串的UNICODE码位点)来排,如果要根据大小排序,需要传入一个 ...
- PHP中逻辑运算符and/or与||/&&的一个坑
我原来以为PHP中的and和&&是一样的, 只是写法上为了可读性和美观, 事实上我错了. 这里面深藏了一个坑! 看以下代码: $bA = true; $bB = false; $b1 ...
- 困扰多日的C#调用Haskell问题竟然是Windows的一个坑
最近一直被C#调用Haskell时的“尝试读取或写入受保护的内存”问题所困扰(详见C#调用haskell遭遇Attempted to read or write protected memory,C# ...
随机推荐
- Selenium 2自动化测试实战34(编写Web测试用例)
编写Web测试用例 1.介绍了unittest单元测试框架,其主要是来运行Web自动化测试脚本.简单的规划一下测试目录:web_demo1/------test_case/------------te ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-7.接口配置文件自动映射到属性和实体类配置
笔记 7.接口配置文件自动映射到属性和实体类配置 简介:使用@value注解配置文件自动映射到属性和实体类 1.添加 @Component或者Configuration 注解: ...
- Mac下也能用抓包工具Fiddler
一直以来都是在Windows底下工作,对于抓包工具,自然而然当属Fiddler最最出色.不过Fiddler是在.Net runtime环境下运行的,所以想要在Mac下使用,有些困难. 在试过了Char ...
- 【笔记】7天玩转容器&CKA管理员实训
第一部分 day1,容器基础知识介绍 安装 apt-get install docker-engine [root@cce-7day-fudonghai-24106 01CNL]# docker -v ...
- Mrchen测试人生
auto:chenyq date:20190920 data:今天是我从事10年IT软件测试工作来的 开始写技术博客的第一次,希望今后能给互联网需要查询技术知识带来方便: 说起我的测试人生 路也走了1 ...
- 手把手教你用原始方式上传项目至GitHub
小编GitHub:https://github.com/ds1889 首先你得注册一个自己的GitHub账号,注册网址:https://github.com/join 有了自己的账号以后,就可以进行登 ...
- SGI STL源码stl_vector.h分析
前言 vector 是最常用的 C++ 容器,其动态扩容的特性是普通数组不具备的,这大大增加了编程的灵活性.虽然平时用 vector 很多,也能基本理解其原理,但无法从深层次理解.直到研读了 vect ...
- Spring学习笔记(一)
Spring学习笔记(一) 这是一个沉淀的过程,大概第一次接触Spring是在去年的这个时候,当初在实训,初次接触Java web,直接学习SSM框架(当是Servlet都没有学),于是,养成了一个很 ...
- Mysql创建、使用循环函数
创建函数 create procedure names() begin declare i int default 0; while i < 3000 do INSERT INTO studen ...
- Spring4学习回顾之路01—HelloWorld
以前公司一直使用的是spring3.0,最近一段时间开始用了4.0,官网上都已经有了5.0,但是很多知识点已经忘了差不多了,趁现在项目不忙写写随笔,一来回顾自己的知识点,二来如果能帮助比我还小白的小白 ...