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元素
选取所有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)