第七篇css选择器实现字段解析

爬行的龟      2022-02-10     278

关键词:

CSS选择器的作用实际和xpath的一样,都是为了定位具体的元素 

 

 

举例我要爬取下面这个页面的标题

In [20]: title = response.css(".entry-header h1")

In [21]: title
Out[21]: [<Selector xpath="descendant-or-self::*[@class and contains(concat(' ', normalize-space(@class), ' '), ' entry-header ')]/descendant-or-self::*/h1" data='<h1>谷歌用两年时间研究了 180 个团队,发现高效团队有这五个特征</h1>'>]

In [22]: title = response.css(".entry-header h1").extract()

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

In [24]: ##可以使用css的::text取到内容

In [25]: title = response.css(".entry-header h1::text").extract()

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

获取文章创建日期:

In [38]: date_text = response.css(".entry-meta-hide-on-mobile").extract()

In [39]: date_text
Out[39]: ['<p class="entry-meta-hide-on-mobile">\r\n\r\n            2017/08/23 ·  <a href="http://blog.jobbole.com/category/career/" rel="category tag">职场</a>\r\n            \r\n                            · <a href="#article-comment"> 7 评论 </a>\r\n            \r\n\r\n            \r\n             ·  <a href="http://blog.jobbole.com/tag/google/">Google</a>, <a href="http://blog.jobbole.com/tag/%e5%9b%a2%e9%98%9f/">团队</a>\r\n            \r\n</p>']

In [40]: date_text = response.css(".entry-meta-hide-on-mobile::text").extract()

In [41]: date_text
Out[41]: 
['\r\n\r\n            2017/08/23 ·  ',
 '\r\n            \r\n                            · ',
 '\r\n            \r\n\r\n            \r\n             ·  ',
 ', ',
 '\r\n            \r\n']

In [42]: date_text = response.css(".entry-meta-hide-on-mobile::text").extract()[
    ...: 0]

In [43]: date_text
Out[43]: '\r\n\r\n            2017/08/23 ·  '

In [44]: date_text = response.css(".entry-meta-hide-on-mobile::text").extract()[
    ...: 0].strip()

In [45]: date_text
Out[45]: '2017/08/23 ·'

In [46]: date_text = response.css(".entry-meta-hide-on-mobile::text").extract()[
    ...: 0].strip().replace("·","").strip()

In [47]: date_text
Out[47]: '2017/08/23'

 获取评论数

 

 

In [49]: comment_num = response.css("a[href='#article-comment']")

In [50]: comment_num
Out[50]: 
[<Selector xpath="descendant-or-self::a[@href = '#article-comment']" data='<a href="#article-comment"> 7 评论 </a>'>,
 <Selector xpath="descendant-or-self::a[@href = '#article-comment']" data='<a href="#article-comment"><span class="'>]

In [51]: comment_num = response.css("a[href='#article-comment'] span::text").ext
    ...: ract()

In [52]: comment_num
Out[52]: [' 7 评论']

In [53]: comment_num = response.css("a[href='#article-comment'] span::text").ext
    ...: ract().strip()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-53-18ae8761867f> in <module>()
----> 1 comment_num = response.css("a[href='#article-comment'] span::text").extract().strip()

AttributeError: 'list' object has no attribute 'strip'

In [54]: comment_num = response.css("a[href='#article-comment'] span::text").ext
    ...: ract()[0]

In [55]: comment_num
Out[55]: ' 7 评论'

In [56]: 
View Code

 

 PS:css选择器里,不同标签使用空格隔开

 

第七篇:面向对象高级

第七篇:面向对象高级   PYTHON-绑定方法反射内置函数PYTHON-组合封装多态property装饰器 查看详情

html+css第七篇-表格

表格标签:table表格thead表格头tbody表格主体tfoot表格尾tr表格行th元素定义表头td元素定义表格单元表格样式重置table{border-collapse:collapse;}单元格间隙合并th,td{padding:0;}重置单元格默认填充colspan属性规定单元格可横跨的列数。<tdco... 查看详情

第七十节,css选择器

css选择器  学习要点:1.选择器总汇2.基本选择器3.复合选择器4.伪元素选择器本章主要探讨HTML5中 CSS选择器,通过选择器定位到想要设置样式的元素。目前CSS选择器的版本已经升级至第三代,即 CSS3选择器。CSS3选择... 查看详情

我的第十七篇博客---css

css选择器:将css添加到<head>与</head>之间,并用<style></style>标记声明的一种样式。语法如下:<style>这里写css内容</style>全局选择器:设置所有标签使用同一样式,用*表示语法:*例如:*color:red;所有字体... 查看详情

构建之法——第七篇

本周我对于软件的设计与实现和用户体验进行了一个深度的学习。我们写软件就是要解决用户的需求,我们需要表达和传递一些信息:在“需求分析”阶段,我们要搞清楚,在问题领域的现实世界里,都有哪些实体,如何抽象出... 查看详情

flask初识,第七篇,flask中的路由(代码片段)

 Flask中的路由系统其实我们并不陌生了,从一开始到现在都一直在应用@app.route("/",methods=["GET","POST"])为什么要这么用?其中的工作原理我们知道多少?请关注跟DragonFire学Flask之路由系统,这里有你想要的答案 1.@app.route()装饰器... 查看详情

我的第二十七篇博客---beautifulsoup与csv操作方法

BeautifulSoup和lxml一样,也是一个HTML/XML的解析器,主要的功能也是如何解析和提取HTML/XML数据lxml只会局部遍历,而BeautifulSoup是基于HTMLDOM的,会载入整个文档,解析整个DOM树,因此时间和内存开销都会大很多,所以性能要低于lxml/B... 查看详情

第七篇springsecurity中的权限管理

SpringSecurity中的权限管理  SpringSecurity是一个权限管理框架,核心是认证和授权,前面已经系统的给大家介绍过了认证的实现和源码分析,本文重点来介绍下权限管理这块的原理。一、权限管理的实现  服务端的... 查看详情

advancedlocomotionsystemv第七篇c++实现角色蹲伏和跑步细节(代码片段)

目前阶段结果展示也get到了怎么去做精斗云移动动作😳😳😳😳查看所有文章AdvancedLocomotionSystemV思维导图站立行走运动细节说明pivot触发储存在八向移动中:然后再通知中将其开启。站立姿态与行走姿态之间... 查看详情

advancedlocomotionsystemv第七篇c++实现角色蹲伏和跑步细节(代码片段)

目前阶段结果展示也get到了怎么去做精斗云移动动作😳😳😳😳查看所有文章AdvancedLocomotionSystemV思维导图站立行走运动细节说明pivot触发储存在八向移动中:然后再通知中将其开启。站立姿态与行走姿态之间... 查看详情

第七天

CSS层次选择器后代选择器:在某个元素的后面bodypbackground:red;子选择器:一代body>pbackground:yellow;相邻兄弟选择器:同辈(在它下面的兄弟).active+pbackground:#a13d30;通用选择 查看详情

coreanimation文档翻译(第七篇)—改变layer的默认动画

前言核心动画使用action对象实现它的可视化动画。一个action对象是指遵循CAAction协议并定义了Layer相关的动画行为的对象。所有的CAAnimation对象实现了这个协议,无论何时Layer的属性发生变化的时候就会执行对应的action对象(包含C... 查看详情

第七篇flowable核心内容之任务分配(代码片段)

Flowable的任务分配1.任务分配1.1固定分配  固定分配就是我们前面介绍的,在绘制流程图或者直接在流程文件中通过Assignee来指定的方式1.2表达式分配  Flowable使用UEL进行表达式解析。UEL代表UnifiedExpressionLanguage,是EE6... 查看详情

第七篇camunda系列-身份服务(代码片段)

身份服务  在流程定义中在任务结点的assignee固定设置任务负责人,在流程定义时将参与者固定设置在.bpmn文件中,如果临时任务负责人变更则需要修改流程定义,系统可扩展性差。针对这种情况可以给任务设置多个候选人或... 查看详情

第七篇camunda系列-身份服务(代码片段)

身份服务  在流程定义中在任务结点的assignee固定设置任务负责人,在流程定义时将参与者固定设置在.bpmn文件中,如果临时任务负责人变更则需要修改流程定义,系统可扩展性差。针对这种情况可以给任务设置多... 查看详情

第七篇图像分类的评价指标

文章目录摘要混淆矩阵准确率(Accuracy)精确率(Precision)召回率(Recall)F1-score代码样例 查看详情

第七篇图像分类的评价指标

文章目录摘要1、混淆矩阵2、准确率(Accuracy)3、精确率(Precision)4、召回率(Recall)5、F1-score6、代码样例 查看详情

第七篇-列表式app:listactivity及listview

一、新建一个emptyactivity的项目。二、修改MainActivity.java:extendsAppCompactActivity改为extendsListActivity。注释掉setContentView(R.layout.activity_main);packagecom.example.aimee.listapp;importandroid.app.ListActivity;im 查看详情