Python爬虫学习8-css选择器使用

在 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值,这样程序容错性比较好,不抛异常。

你可能感兴趣的:(Python爬虫学习8-css选择器使用)