问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

R爬虫必备基础——CSS+SelectorGadget

发布网友 发布时间:2022-09-11 18:29

我来回答

1个回答

热心网友 时间:2024-12-04 09:44

CSS,全称叫作Cascading Style Sheets,即层叠样式表。“层叠”是指当在HTML中引用了数个样式文件,并且样式发生冲突时,浏览器能依据层叠顺序处理。“样式”指网页中文字大小、颜色、元素间距、排列等格式。HTML定义了网页的结构,但是只有HTML页面的布局并不美观,可能只是简单的节点元素的排列,为了让网页看起来更好看一些,这里借助了CSS。CSS是目前唯一的网页页面排版样式标准,有了它的帮助,页面才会变得更为美观。如下图的右侧,即为CSS。

就局部放大来看,下图所示就是一个CSS样式。大括号前面是一个CSS选择器,此选择器的意思是首先选中id为head_wrapper且class为s-ps-islite的节点,然后再选中其内部的class为s-p-top的节点。大括号内部写的就是一条条样式规则,例如position指定了这个元素的布局方式为绝对布局,bottom指定元素的下边距为40像素,width指定了宽度为100%占满父元素,height则指定了元素的高度。也就是说,我们将位置、宽度、高度等样式配置统一写成这样的形式,然后用大括号括起来,接着在开头再加上CSS选择器,这就代表这个样式对CSS选择器选中的元素生效,元素就会根据此样式来展示了。在网页中,一般会统一定义整个网页的样式规则,并写入CSS文件中(其后缀为css)。在HTML中,只需要用link标签即可引入写好的CSS文件,这样整个页面就会变得美观、优雅。

在爬虫过程中都需要爬取目标的节点,我们知道网页由一个个节点组成,CSS选择器会根据不同的节点设置不同的样式规则,那什么是节点?又怎样来定位节点呢?下面围绕这两个问题进行介绍。

在HTML中,所有标签定义的内容都是节点,它们构成了一个HTML DOM树。我们先看下什么是DOM,DOM是W3C(万维网联盟)的标准,其英文全称Document Object Model,即文档对象模型。它定义了访问HTML和XML文档的标准:W3C文档对象模型(DOM)是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。W3C DOM标准被分为如下3个不同的部分:

核心DOM:针对任何结构化文档的标准模型。
XML DOM:针对XML文档的标准模型。
HTML DOM:针对HTML文档的标准模型。

根据W3C的HTML DOM标准,HTML文档中的所有内容都是节点。整个文档是一个文档节点;每个HTML元素是元素节点;HTML元素内的文本是文本节点;每个HTML属性是属性节点;注释是注释节点。HTML DOM将HTML文档视作树结构,这种结构被称为节点树,如下图所示。

节点树中的节点彼此拥有层级关系。我们常用父(parent)、子(child)和兄弟(sibling)等术语描述这些关系。父节点拥有子节点,同级的子节点被称为兄弟节点。在节点树中,顶端节点称为根(root)。除了根节点之外,每个节点都有父节点,同时可拥有任意数量的子节点或兄弟节点。下图展示了节点树以及节点之间的关系。

在CSS中,我们使用CSS选择器来定位节点。例如,下图中div节点的id为container,那么就可以表示为#container,其中#开头代表选择id,其后紧跟id的名称。另外,如果我们想选择class为wrapper的节点,便可以使用.wrapper,这里以点(.)开头代表选择class,其后紧跟class的名称。另外,还有一种选择方式,那就是根据标签名筛选,例如想选择二级标题,直接用h2即可。这是最常用的3种表示,分别是根据id、class、标签名筛选,请牢记它们的写法。

另外,CSS选择器还支持嵌套选择,各个选择器之间加上空格分隔开便可以代表嵌套关系,如#container .wrapper p则代表先选择id为container的节点,然后选中其内部的class为wrapper的节点,然后再进一步选中其内部的p节点。另外,如果不加空格,则代表并列关系,如div#container .wrapper p.text代表先选择id为container的div节点,然后选中其内部的class为wrapper的节点,再进一步选中其内部的class为text的p节点。这就是CSS选择器,其筛选功能还是非常强大的。另外,CSS选择器还有一些其他语法规则,具体如下表所示。

但是,这样每次都要浪费部分时间去寻找定位点,这样既不很方便,也不高效,那么如何提高爬虫中这部分工作的效率呢?今天我给大家分享一个爬虫的利器,它就是:SelectorGadget 插件。

point and click CSS selectors,强大的谷歌插件CSS生成器,有助于我们快速找到html的节点信息,它也支持Xpath表达式。Selector Gadget是一个开源的Chrome扩展程序,可以轻松地在复杂的网站上生成和选择CSS选择器。安装扩展程序后,转到任意页面并启动它。网站右下方会打开一个方框。单击您希望选择器匹配的页面元素(它将变为绿色)。然后SelectorGadget将为该元素生成一个最小的CSS选择器,并突出显示(*)选择器匹配的所有内容。现在单击突出显示的元素将其从选择器中删除(红色),或单击未突出显示的元素将其添加到选择器。通过这个选择和拒绝过程,SelectorGadget可以帮助您找到满足您需求的完美CSS选择器。

首先需要安装一下这个神器。在谷歌浏览器中的应用商店里,搜索到SelectorGadget插件,点击“添加至Chrome”即可。如果不能打开Chrome应用商店,可以通过网上的其他途径获取该插件,之后再手动添加至谷歌浏览器即可。手动添加方法是:打开谷歌浏览器扩展程序,并开启开发者模式,将该插件拖拽到浏览器里,如果不成功,可以选择“加载已解压的扩展程序”,将该文件夹先压缩再解压添加进去。

同时在页面栏上能看到红框处的SelectorGadget标志。

咱们以 https://www.yugaopian.cn/ 网页为例,首先点击网页上方的SelectorGadget,然后在网页下方弹出SelectorGadget框。接下来,咱们尝试一下如何使用?比如我们想定位“拆弹专家2”的节点,直接点击它,则会在框内显示其节点——.item-title(如下图)。绿色:单击希望选择器匹配的页面元素。*:生成的这个CSS选择器【.item-title】能匹配的所有内容,从下图可以发现该CSS选择器可以抓取哪些信息。当你把鼠标放到这些高亮的元素上时,会显示红色,代表要将其从选择器中删除;而单击未突出显示的元素将其添加到选择器。

在实际构建CSS表达式过程中,需要搭配网页开发工具里的copy selector功能使用,非常方便。比如:定位抓取以下网页( https://www.yugaopian.cn/allmovies )红框内的所有电影名称信息。

具体操作流程如下:在某一电影名称下右击——检查,定位到电影名称的网页源码处,然后右击—copy—copy selector,再打开SelectorGadget,在框内粘贴CSS表达式,按Enter键,发现在网页中准确定位出该电影名称。但我们需要定位所有的电影名称,在已有的CSS表达式【(body > div:nth-child(5) > div.inner-wrapper > div.inner-2col-main > div > ul > li:nth-child(1) > a > span.item-title)】上进行修改,这里可以发现【li:nth-child(1)】只选取了第一个,而我们所需选取所有,因此去掉后面的【(1)】即可。在具体实践中,如何修改还有有赖于小伙伴对网页结构和CSS语法的理解。最终,获取以上红框内电影名称的CSS选择器表达式为:【body > div:nth-child(5) > div.inner-wrapper > div.inner-2col-main > div > ul > li:nth-child > a > span.item-title】。在实际应用中,不同节点标签之间用空格分隔:【body div:nth-child(5) div.inner-wrapper div.inner-2col-main div ul li:nth-child a span.item-title】。

但在SelectorGadget使用中,发现其构建的CSS表达式往往很复杂,大部分情况下其实也是可以自己构建CSS表达式的。构建CSS选择表达式的关键在于清楚整个网页结构,找到标签之间的属于关系、属性值属于哪个标签等,就可以比较快速的构建。而且浏览器很智能,鼠标在源码上的位置,可以在网页显示上呈现阴影,这个功能简直太香了。以上红框内所有电影名字的CSS表达式也可以表示为:【div.movlist ul li a span.item-title】

然后用SelectorGadget验证,如下图,发现高亮选中的部分就是我想要定位的信息,说明这个CSS表达式正确。

以上简单介绍了如何构建CSS表达式,在爬虫过程中定位抓取特定节点数据是非常重要的一步,有了这步才有下游的精准数据提取与清洗。希望本次教程能给有需要的小伙伴一点小小帮助!

更多内容可关注公共号“YJY技能*”~~~

往期回顾
R爬虫在工作中的一点妙用
R爬虫必备基础——HTML和CSS初识
R爬虫必备基础——静态网页+动态网页
R爬虫必备——rvest包的使用

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
高考为什么不能补报志愿? 帮我翻译一句话“不管多久以后,不管世界变成什么样子,我都是哪个最骄傲... 温州到周口的大巴车经过台州路桥客运中心那里吗? 微信怎么设置看不到微信号 不想让微信号显示出来怎么办 2021年大学教师资格证报名费用 大埔教师资格证报名网 大埔县教育局办教师资格证需要准备哪些资料? 深情触摸2016百度云链接 求深情触摸百度云分享 介绍你的家乡? 梦见熟悉的人脸上有块猪肉对自己笑? 如何操作,在哪里发软文比较好 梦见被阻止下山 酒精灯哪里买,化学仪器店在揭西有卖不 鹤望兰适合养在室内吗 早个男女对唱的歌 第一句是你还好吗,好久不见, 你还好吗..好久不见了..日语怎么写 只见桃花不见人后面的诗句 只见桃花不见人全诗 学生学年自我评价范文五篇800字 对方发不忙怎么回复? 三亚吃海鲜,看了攻略都说自己买海鲜加工,怎么买,怎么加工? 什么品牌的家用电梯最好 本人今天在杭州西湖看见一群穿的汉服,不知道是哪个学校的?求打听... 西塘有汉服实体店吗? 梦见找房子租 MATLAB数值分析与应用的内容简介 老酸奶可以做面膜吗 碧血洗银枪啥意思 杜特门窗软件如何在一张纸上画两个图 用免漆板做一个高六十公分,宽十公分,S型的,形状怎么做? 我的如果在别人的手机上登录会看到我的聊天记录吗? 请问杜特门窗怎么样? 我的如果在别人的手机上登录会看到我的聊天记录吗? 拉萨自助旅游需要带什么 五千左右满足UG的电脑? 小说主人翁赵旭,问书名? 《代替姐姐嫁入豪门后》txt下载在线阅读全文,求百度网盘云资源_百度知 ... 梦见去世的奶奶要吃小黄米 12315协商需要本人出面吗 我的店关门了顾客要退款投诉到市场监督部门,如果我拒绝出面调解会怎么... PLC可以输入端进220V吗? 福盛源的意思? 我想在苏州买红木家具,哪位给我介绍一下主要应该在哪里买? 苏州和东阳哪里买红木家具便宜 苏州红木家具批发大市场 苏州红木家具哪里比较好?找明仕阁购买放心家具 货真价值 苏州蠡口家具城哪里有红木家具卖? cf每日任务自选卡怎么获得