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]
 
 

Scrapy学习-2-xpath&css使用的更多相关文章

  1. Scrapy:学习笔记(1)——XPath

    Scrapy:学习笔记(1)——XPath 1.快速开始 XPath是一种可以快速在HTML文档中选择并抽取元素.属性和文本的方法. 在Chrome,打开开发者工具,可以使用$x工具函数来使用XPat ...

  2. Scrapy学习笔记(5)-CrawlSpider+sqlalchemy实战

    基础知识 class scrapy.spiders.CrawlSpider 这是抓取一般网页最常用的类,除了从Spider继承过来的属性外,其提供了一个新的属性rules,它提供了一种简单的机制,能够 ...

  3. Scrapy:学习笔记(2)——Scrapy项目

    Scrapy:学习笔记(2)——Scrapy项目 1.创建项目 创建一个Scrapy项目,并将其命名为“demo” scrapy startproject demo cd demo 稍等片刻后,Scr ...

  4. scrapy学习(完全版)

    scrapy1.6中文文档 scrapy1.6中文文档 scrapy中文文档 Scrapy框架 下载页面 解析页面 并发 深度 安装 scrapy学习教程 如果安装了anconda,可以在anacon ...

  5. python爬虫之Scrapy学习

    在爬虫的路上,学习scrapy是一个必不可少的环节.也许有好多朋友此时此刻也正在接触并学习scrapy,那么很好,我们一起学习.开始接触scrapy的朋友可能会有些疑惑,毕竟是一个框架,上来不知从何学 ...

  6. 我们应当怎样学习HTML和CSS

    目标读者:web前端小白.大神请绕路 学习一门新技术,应当找一本经典入门书,在两三天之内快速翻阅完毕,了解其概貌. 然后再制定一个学习路线图(这个路线图绝大多数情况下非书本目录的顺序),接着遵循学习路 ...

  7. Gulp学习指南之CSS合并、压缩与MD5命名及路径替换(转载)

    本文转载自: Gulp学习指南之CSS合并.压缩与MD5命名及路径替换

  8. HTML+CSS学习笔记 (7) - CSS样式基本知识

    HTML+CSS学习笔记 (7) - CSS样式基本知识 内联式css样式,直接写在现有的HTML标签中 CSS样式可以写在哪些地方呢?从CSS 样式代码插入的形式来看基本可以分为以下3种:内联式.嵌 ...

  9. 9大理由告诉你为什么应该学习HTML跟CSS

    你是不是听过太多人告诉你:「人人都应该要会 coding!」都快要不耐烦了对吧? 究竟为什么身为一个行销专业者.作家.金融巨擘--,整个世界还要你学会 coding? 事实上仅仅要对 HTML.CSS ...

  10. Scrapy学习篇(十)之下载器中间件(Downloader Middleware)

    下载器中间件是介于Scrapy的request/response处理的钩子框架,是用于全局修改Scrapy request和response的一个轻量.底层的系统. 激活Downloader Midd ...

随机推荐

  1. pytest生成测试报告

    生成JunitXML格式的测试报告    --junitxml=report\h.xml 生成result log 格式的测试报告     --resultlog=report\h.log 生成htm ...

  2. visual c++ build tools的安装与使用

    https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=BuildTools&r ...

  3. What is the difference between try/except and assert?

    assert only check if a condition is true or not and throw an exception. A try/except block can run a ...

  4. 二. python函数与模块

    第四章.内置函数与装饰器详解 1.内置函数补充1 注:红色圆圈:必会:  紫红色方框:熟练:   绿色:了解 callable() 判断函数是否可以被调用执行 def f1(): pass f1() ...

  5. ios之UILabel

    详细使用: UILabel *label = [[UILabelalloc] initWithFrame:CGRectMake(0, 0, 75, 40)];   //声明UIlbel并指定其位置和长 ...

  6. mongodb详细教程

    转自:https://www.cnblogs.com/liruihuan/tag/MongoDB/

  7. Re:从零开始的Linux之路(文件权限)

    基于 Red Hat Enterprise Linux 7.5 或者 CentOS 7.4 基本概念 Linux最核心的一个概念就是:Linux里面任何东西都可以被视为一个文件,包括系统本身(说到底L ...

  8. VC++中char和TCHAR之间转换

    char:计算机编程语言(c.c++.java等)中可容纳单个字符的一种基本数据类型. TCHAR:为了满足Unicode编码,对char的扩展,即_T(“str”)表示TCHAR类型 C++支持两种 ...

  9. LeetCode 637. Average of Levels in Binary Tree(层序遍历)

    Given a non-empty binary tree, return the average value of the nodes on each level in the form of an ...

  10. springboot elk实时日志搭建

    https://blog.csdn.net/yy756127197/article/details/78873310 基本的上的过程如这篇博客,logback的配置文件和依赖不太一样 具体见源码其中的 ...