在 CSS 中,选择器是一种模式,用于选择需要添加样式的元素。
常用css选择器
表达式 | 说明 |
---|---|
* | 选择所有节点 |
#container | 选择id为container的节点 |
.container | 选择所有class包含container的节点 |
li a | 选取所有li下的所有a节点 |
ul + p | 选择ul后面的第一个p元素 |
div#container > ul | 选取id为container的div的第一个ul子元素 |
ul ~ p | 选取与ul相邻的所有p元素 |
a[title] | 选取所有有title属性的a元素 |
a[href="http://163.com "] |
选取所有href属性为163的a元素 |
a[href*="163"] | 选取所有href属性包含163的a元素 |
a[href^="http"] | 选取所有href属性以http开头的a元素 |
a[href$=".jpg"] | 选取所有href以.jpg结尾的a元素 |
input[type=radio]:checked | 选择选中的radio的元素 |
div:not(#container) | 选取所有id非container的div属性 |
li:nth-child(3) | 选取第三个li元素 |
tr:nth-child(2n) | 第偶数个tr |
还是以上课页面为例
获得标题
title = response.css('div.entry-header h1::text').extract()[0]
这里获得文字内容的方法是::text
,不再是text()
获得结果
类似于xpath,这里改用css选择器
title = response.css('div.entry-header h1::text').extract()[0]
create_date = response.css('p.entry-meta-hide-on-mobile::text').extract()[0].replace('·','').strip()
fav_nums = response.css("span.bookmark-btn::text").extract()[0]
match_re = re.match(".*?(\d+).*", fav_nums)
if match_re:
fav_nums = match_re.group(1)
comment_nums = response.css("a[href='#article-comment'] span::text").extract()[0]
match_re = re.match(".*?(\d+).*", comment_nums)
if match_re:
comment_nums = match_re.group(1)
content = response.css(".entry").extract()[0]
tag_list = response.css('p.entry-meta-hide-on-mobile a::text').extract()
tag_list = [e for e in tag_list if not e.strip().endswith("评论")]
tags = ",".join(tag_list)
注意:extract()可以改为extract_first(default="Not found"),它会得到返回的第一个值,如果没有则返回一个None或者设定的default值,这样程序容错性比较好,不抛异常。