第六篇xpath的用法

author author     2022-09-21     722

关键词:

技术分享

技术分享

技术分享

技术分享

 使用pycharm debug调试效率会比较慢,因为每次调试都需要向url发送请求,等返回信息,scrapy提供一种方便调试的功能,如下:

>>>(third_project) [email protected]:pachong$ scrapy shell http://blog.jobbole.com/112239/
>>> title = response.xpath(//*[@id="post-112239"]/div[1]/h1)
>>> title
[<Selector xpath=//*[@id="post-112239"]/div[1]/h1 data=<h1>谷歌用两年时间研究了 180 个团队,发现高效团队有这五个特征</h1>>]
>>> title.extract()
[<h1>谷歌用两年时间研究了 180 个团队,发现高效团队有这五个特征</h1>]
>>> title = response.xpath(//*[@id="post-112239"]/div[1]/h1/text())
>>> title
[<Selector xpath=//*[@id="post-112239"]/div[1]/h1/text() data=谷歌用两年时间研究了 180 个团队,发现高效团队有这五个特征>]

extract()方法可以取到select list里的date,text()方法可以取到内容。

In [37]: title2 = response.xpath("//*[@id=‘post-112239‘]/div[1]/h1").extract()

In [38]: title2
Out[38]: [<h1>谷歌用两年时间研究了 180 个团队,发现高效团队有这五个特征</h1>]

In [39]: title2 = response.xpath("//*[@id=‘post-112239‘]/div[1]/h1")

In [40]: title2
Out[40]: [<Selector xpath="//*[@id=‘post-112239‘]/div[1]/h1" data=<h1>谷歌用两年时间研究了 180 个团队,发现高效团队有这五个特征</h1>>]

In [41]: title2 = response.xpath("//*[@id=‘post-112239‘]/div[1]/h1/text()").extr
    ...: act()

In [42]: title2
Out[42]: [谷歌用两年时间研究了 180 个团队,发现高效团队有这五个特征]

In [43]: 

 

PS:在chrome里,按F12看到的代码是加载完所有插件后的,比如JS,如果通过通过根路径来定位要找的内容是容易出错的,因为xpath搜索的不会把js等生成的元素计算在内,这个可以通过鼠标右键查看源码来判断哪些是js生成的,然后过滤掉。

对于属性里有多个值的情况,比如class 里有多个值:

技术分享

可以使用scrapy内置的contains方法:

In [44]: ret = response.xpath("//div[contains(@class,‘post-112239‘)]")

In [45]: ret
Out[45]: [<Selector xpath="//div[contains(@class,‘post-112239‘)]" data=<div class="post-112239 post type-post s>]

 

[dart学习]第六篇:流程控制语句(代码片段)

经过前面的基础知识了解学习,我们今天可以进入语句模块啦。dart主要有以下流程控制语句:if-elsefor循环while和do-while循环break和continueswitch-caseassert当然,你还可以使用try-catch或throw(一)if-elsedart的if(或者elseif)的条件表达式必... 查看详情

关于ajax第六篇

使用回调函数回调函数是一种以参数形式传递给另一个函数的函数。如果您的网站上存在多个AJAX任务,那么您应该为创建XMLHttpRequest对象编写一个标准的函数,并为每个AJAX任务调用该函数。该函数调用应该包含URL以及发生onreadys... 查看详情

第六篇抽屉效果+uitabbarcontroller

依赖于第三方的框架RESideMenu1.AppDelegate.m中的实现-(BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions{//Overridepointforcustomizationafterapplicationlaunch.//在 查看详情

第六篇:面向对象

第六篇:面向对象  PYTHON-面向对象类绑定方法PYTHON-面向对象继承派生PYTHON-面向对象-练习-王者荣耀对砍游戏  查看详情

第六篇avplayer地址视频播放控件

1.引用头文件#importAVFoundation2.自定义AVPlayer(播放的机器)3.自定义AVPlayerItem(胶片)>>视频的URL转成AVAsset4.AVPlayerLayer(白板)  查看详情

第六篇javascript面向对象

h1{background-color:palegreen}一、闭包闭包是指可以包含自由(未绑定到特定对象)变量的代码块。「闭包」,是指拥有多个变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。闭包是个... 查看详情

小刘同学的第六十六篇博文

  夜深了,1:53了  今天其实破了一个大戒  距上一次写代码貌似就longlongago的事了  我想我需要一场彻底的改变  发自内心由内而外的改变  睡了  大家晚安 查看详情

第六篇vggnet——模型精讲

文章目录 查看详情

web前端第六篇javascript对象

在JavaScript中除了null和undefined以外其他的数据类型都被定义成了对象,也可以用创建对象的方法定义变量,String、Math、Array、Date、RegExp都是JavaScript中重要的内置对象,在JavaScript程序大多数功能都是基于对象实现的<scriptlanguage=... 查看详情

第六篇6.1章

 1.数组概述  数组:存储在一个连续的内存块中相同的数据类型的元素集合  作用:解决一些简单的,有繁琐的重复操作2.数组初始化  数组声明:声明一个数组引用  数组初始化:通过new关键字创建,对数组进行... 查看详情

构建之法—第六篇

这周的学习关于典型用户和场景。VisualStudio是一个非常成功的软件开发集成环境,支持项目管理,测试工具,以及第三方的插件。对于定义典型用户,我们有不同的需求:受欢迎的典型用户和不受欢迎的典型用户,其中,受欢迎... 查看详情

第六篇flowable核心流程操作的本质(代码片段)

Flowable完成流程操作1.流程部署详解1.1部署实现  我们先来看下流程部署的具体过程。代码实现/***部署流程*/@Testpublicvoidtest3()ProcessEngineprocessEngine=ProcessEngines.getDefaultProcessEngine();RepositoryServicerepositoryService=pr 查看详情

coreanimation文档翻译(第六篇)

?高级动画技巧配置属性动画或者关键帧动画的方式是多种多样的。需要同时执行多个动画或者顺序执行多个动画的APP,可以通过高级的方式同步这些动画的timing或者将这些动画绑定在一起。我们也可以使用其他类型的动画对象... 查看详情

第六篇数据类型

整数(int)Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等。浮点数(float)浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个... 查看详情

从orchard学到的东西--第六篇cachemanager2

  接上一篇,关于ICacheContextAccessor先看一下默认实现,用于保存一个获取上下文,且这个上下文是线程静态的:publicclassDefaultCacheContextAccessor:ICacheContextAccessor{[ThreadStatic]privatestaticIAcquireContext_threadInstance;publicstaticIAcqu 查看详情

[数据结构--手撕排序算法第六篇]快速排序

...​​​​四、快速排序的特性总结​​前言手撕排序算法第六篇:快速排序!从本篇文章开始,我会介绍并分析常见的几种排序,例如像插入排序,冒泡排序,希尔排 查看详情

第六篇css样式背景背景图文本链接

元素背景、文本(字体)样式、链接这里我们只学习常用的一些,更多的扩展就要同学们自己去了解,或者下方评论。这里我们为了简便,用的是CSS的内嵌形式。 元素背景:我们写模块的时候,有的时候为了区别多个模块,我... 查看详情

第六篇scrum冲刺博客

一、DailyScrumMeeting照片二、每个人的工作成员ItemID已完成工作明天计划完成的工作遇到的困难张鸿o1已完成工作,实现积分变换,碰撞检测将其他剩余功能进行整合结束场景的生成夏浚杰o2将昨天写的代码出现的漏洞补上将整体代... 查看详情