xpath选择器与css选择器

xpath 语法

表达式 说明
article 选取所有article元素的所有子节点
/article 选取根元素article
articel/a 选取所有属于article的子元素的a元素
//div 选取所有div子元素(不论出现在文档任何地方)
article//div 选取所有属于article元素的后代的div元素,不管它出现在article之下的任何位置
//@class 选取所有名为class的属性
/article/div[1] 选取属于article子元素的第一个div元素
/article/div[last()] 选取属于article子元素的最后一个div元素
/article/div[last()-1] 选取属于article子元素的倒数第二个div元素
//div[@lang] 选取所有拥有lang属性的div元素
//div[@lang=’eng’] 选取所有lang属性为eng的div元素
/div/* 选取属于div元素的所有子节点
//* 选取所有元素
//div[@*] 选取所有带属性的div元素
/div/a竖线//div/p 选取所有div元素的a和p元素
//span竖线//ul 选取文档中的span和ul元素
article/div/p竖线//span 选取所有属于article元素的div元素的p元素以及文档中的所有span元素

xpath实例

    #//*[@id="post-113493"]/div[1]/h1
    #xpath 返回一个selector,再通过extract()方法,可以得到str的数组------------------
    re_selector=response.xpath("//div[@class='entry-header']/h1/text()")
    title=re_selector.extract()[0]
    create_date = response.xpath("//p[@class='entry-meta-hide-on-mobile']/text()").extract_first().strip().replace('·','').strip()

    #可以获取a标签的href属性值----------------------------
    id = i.xpath("h2/a/@href")[0]

    #获取点赞数
    praise_number=int(response.xpath("//span[contains(@class,'vote-post-up')]/h10/text()").extract_first())
    #获取收藏数
    fav_nums=response.xpath("//span[contains(@class,'bookmark-btn')]/text()").extract_first()
    match_re = re.match(r'.*(\d+).*', fav_nums)
    if match_re:
        fav_nums=match_re.group(1)
    #获取评论数
    comment_nums = response.xpath("//a[@href='#article-comment']/span/text()").extract()[0]
    match_re = re.match(r'.*?(\d+).*', comment_nums)
    if match_re:
        comment_nums = match_re.group(1)
    #内容
    content=response.xpath("//div[@class='entry']").extract()[0]

    tags = response.xpath("//p[@class='entry-meta-hide-on-mobile']/a/text()").extract()

    tag_list=[element for element in tags if not element.strip().endswith('评论')]
    tag_list=",".join(tag_list)

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://www.mvsay.com“] 选取所有href属性为jobbole.com值得a元素
a[href*=”mvsay”] 选取所有href属性包含mvsay的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

选择内容的方式

    #CSS选择器,输出a标签内的属性href值
    post_url=response.css("div.floated-thumb div.post-thumb a::attr(href)").extract()

    #通过CSS选择器提取字段=============================
    title_css = response.css(".entry-header h1::text").extract_first()
    create_date_css = response.css("p.entry-meta-hide-on-mobile ::text").extract()[0].strip().replace('·','').strip()

    # 获取点赞数
    praise_number_css = int(response.css(".vote-post-up h10::text").extract()[0])
    # 获取收藏数
    fav_nums_css = response.css(".bookmark-btn::text").extract()[0]
    match_re = re.match(r'.*(\d+).*', fav_nums_css)
    if match_re:
        fav_nums_css = match_re.group(1)
    # 获取评论数
    comment_nums_css = response.css("a[href='#article-comment'] span::text").extract_first()
    match_re = re.match(r'.*?(\d+).*', comment_nums_css)
    if match_re:
        comment_nums_css = match_re.group(1)
    # 内容
    content_css = response.css("div.entry").extract()[0]

    tags_css = response.css("p.entry-meta-hide-on-mobile a::text").extract()

    tag_list = [element for element in tags_css if not element.strip().endswith('评论')]
    tag_list = ",".join(tag_list)