点击上方“Python爬虫与数据挖掘”,进行关注
/前言/
前几天给大家分享了Xpath语法的简易使用教程,没来得及上车的小伙伴可以戳这篇文章:在Scrapy中如何利用Xpath选择器从网页中采集目标数据——详细教程(上篇)、在Scrapy中如何利用Xpath选择器从网页中采集目标数据——详细教程(下篇)。今天小编给大家介绍Scrapy中另外一种选择器,即大家经常听说的CSS选择器。
/CSS基础/
CSS选择器和Xpath选择器的功能是一致的,都是帮助我们去定位网页结构中的某一个具体的元素,但是在语法表达上有区别。Xpath选择器明明已经可以帮助我们提取信息了,为什么还要学习CSS选择器呢?
萝卜青菜各有所爱,对于不同知识背景的小伙伴,都可以来提取网页信息。只要是能抓到老鼠的猫,都是好猫,同样的,只要能提取信息,不论是正则表达式、BeateafulSoup、Xpath选择器亦或是CSS选择器,都是好的选择器,只不过在效率和难易程度上不一样。此外,对应前端的小伙伴来说,CSS选择器对他们来说就简单很多。
CSS选择器功能强大,从实用性出发,下面是部分比较常用的一些CSS选择器语法,相对来说比较简单,但是也是非常实用的语法,希望大家都可以牢牢掌握,后期在提取网页信息的时候将会事半功倍。
表达式 | 解析 |
---|---|
* | 选择所有的节点 |
div span | 选取所有div下的所有的span节点(子节点) |
div > p | 选取div下面的第一个p子元素 |
. entry-header | 选取所有class包含entry-header的节点 |
#container | 选取id为container的节点 |
img[src] | 选取所有有src属性的img元素 |
img[src=”http://baidu.com/”] | 选取所有src属性为http://baidu.com/值的a元素 |
ul ~ p | 选取与ul相邻的所有p元素 |
有了以上的CSS基础之后,接下来我们进行实际应用。
/实际应用/
仍然以之前的网站为例进行说明,我们的目标数据是标题、发布日期、主题、正文内容、点赞数、收藏数、评论数等。
1、关于标题部分,之前我们利用Xpath的表达式的时候就分析过,得到了唯一性的定位标签,在此不再赘述,如下图所示。
2、仍然利用scrapyshell的调试模式进行助攻,结合上边的CSS基础语法,标题的具体CSS表达式如下图所示。
需要注意的是在CSS中获取标签文本内容的方式是在CSS表达式后边紧跟“::text”,记住是有两个冒号噢,与Xpath表达式不一样。这个表达式看上去比Xpath表达式要简洁一些,所以当某些情况下,大家如果觉得CSS选择器的表达式比Xpath表达式要简短或者理解起来相对容易的话,可以首选CSS选择器,没有具体的要求,大家根据自己的喜爱来进行选择即可,反之亦成立,当然也可以同时在一个爬虫文件将两个或者多个选择器进行交叉使用。
3、接下来是发布日期的提取,仍然是以交互式的方式实现网页与源码之间的交互,其中标签“entry-meta-hide-on-mobile”具有全局唯一性,可以很方便的定位到元素,如下图所示。
4、根据网页结构,我们可轻易的写出发布日期的CSS表达式,可以在scrapy shell中先进行测试,再将选择器表达式写入爬虫文件中,详情如下图所示。
5、关于文章主题标签的CSS表达式,可以看到其在网页结构上处于日期的下方,如下图所示。
6、通过更改一下发布日期的CSS表达式,即可获取到文章主题标签。文章主题标签处于a标签下,如下图所示。
获取到整个列表之后,利用join函数将数组中的元素以逗号连接生成一个新的字符串叫tags,然后写入Scrapy爬虫文件中去。
7、对于点赞数,其分析方法同之前一致,找到唯一的一个标签“vote-post-up”即可定位到数据。
8、点赞数在h10标签下,根据网页结构写出CSS表达式,调试的过程如下图所示。
取出的点赞数是个字符串,需要利用int()将其强制转换为数字。
/小结/
本文基于CSS理论基础,主要介绍了CSS选择器的简单语法和利用CSS选择器做相关数据采集,下一篇文章将继续分享CSS表达式数据采集方法,敬请期待,希望对大家的学习有帮助。
想学习更多关于Python的知识,可以参考学习网址:http://pdcfighting.com/,点击阅读原文,可以直达噢~
------------------- End -------------------
往期精彩文章推荐:
欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持
想加入Python学习群请在后台回复【入群】
万水千山总是情,点个【在看】行不行
/今日留言主题/
随便说一两句吧~~
本文分享自 Python爬虫与数据挖掘 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!