Scrapy学习-2-xpath&css使用

xpath使用
简介
  xpath使用路径表达式在xml和html中进行导航
 
语法
body    # 选取所有body元素的所有子节点

/html   # 选取根元素

body/a  # 选取所有属于body的子元素的a元素

//div   # 选取所有dic子元素(任意地方)

body//div   # 选取所有属于body元素的后代的div元素(body下任意位置)

//@class    # 选取所有名为class的属性

/body/div[1]    # 选取属于body子元素的第一个div元素

/body/div[last()]   # 选取属于body子元素的最后一个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元素

body/div/p|//span  # 选取所有body下的div下的p元素和所有span元素

//span[contains(@class, 'vote-post-up')]    # 寻找所有属性为class的值中包含vote-post-up的span标签

 

xpath对象
  response.xpath()返回的对象可以被无限调用,执行xpath方法继续搜索html内容
 
实例
def parse(self, response):
    title = response.xpath('//div[@class="entry-header"]/h1/text()').extract_first("")
    create_date = response.xpath("//p[@class='entry-meta-hide-on-mobile']/text()").extract()[0].strip().replace("·","").strip()
    praise_nums = response.xpath("//span[contains(@class, 'vote-post-up')]/h10/text()").extract()[0]
    fav_nums = response.xpath("//span[contains(@class, 'bookmark-btn')]/text()").extract()[0]

 

css选择器
简介
  根据标签元素间的层叠关系和元素本身属性获取我们想要的标签
 
语法
*   # 选择所有节点

#container  # 选择id为container的节点

.container  # 选取所有class包含container的节点

.container.hearder  # 选取所有class同时包含container和hearder的节点

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.baidu.com"]  # 选取所有href属性为http://www.baidu.com的a元素

a[href*="baidu"]    # 选取href属性包含baidu的a元素

a[href^="http"]     # 选取href属性以http开头的a元素

a[href$=".html"]     # 选取href属性以html结尾的a元素

input[type=radio]:checked   # 选取选中的radio的元素

div:not(#container) # 选取所有id非container的div属性

li:nth-child(3)     # 选取第三个li元素

tr:nth-child(2n)    # 选取偶数位tr元素

 

使用方式和xpath相似
def parse(self, response):
    title = response.css(".entry-header h1::text").extract()[0]
    create_date = response.css("p.entry-meta-hide-on-mobile::text").extract()[0].strip().replace("·","").strip()
    praise_nums = response.css(".vote-post-up h10::text").extract()[0]
    fav_nums = response.css(".bookmark-btn::text").extract()[0]

 

 

 
 
posted @ 2018-05-17 20:58  前路~  阅读(342)  评论(0编辑  收藏  举报