python应用:爬虫框架Scrapy系统学习第一篇——xpath详解
HTML的三大概念:标签、元素以及属性
标签:尖括号中的文本 例:<head>……</head> 标签通常成对出现
元素:标签中的所有内容 元素中可包含元素
属性:标签的特殊标注等 例:<a href="http:\\www.baidu.com">……</a> 其中,href部分称为属性
使用XPath选择HTML元素
使用‘/’+标签名定位
例: /html/body 将定位到body部分
当某便签下出现多个同标签元素时,使用类似数组的方式定位到最准确的位置
切记:此处下标从1开始,而不是编程中常见的从0开始
例:/html/body/div/p[1] 返回相应位置的第一个p元素
/html/body/div/p 返回相应位置的所有p元素
对于大型文档,精确定位往往需要一个非常大的XPath表达式,为避免这种问题,我们可以使用‘//’语法
例://p 将会选择HTML中所有的p元素
//a 将会选择HTML中所有的链接
同时,//语法可用于层次结构中
例://div//a 得到div元素下所有链接
//div/a 得到div元素直接下级的所有链接
注意:元素下与元素直接下级的区别
此外,可通过符号@来直接定位标签属性
例://a/@href 得到所有链接中的href属性
使用text()函数,只选取文本
例://a/text() 得到所有链接中的文本信息
使用符号*选择指定层级的所有元素
//*[@itemprop="name"] 得到包含itemprop="name"的所有元素
选择包含某个特定属性或特定属性值的标签时使用如下结构
例://a[@href] 得到包含href属性的所有链接
//a[@href="http://www.baidu.com"] 得到href值为“http://www.baidu.com”的所有链接
此外,还可以使用以特定子字符起始或包含的能力
例://a[starts-with(@href, "http://")] 得到href属性以http://为起始的所有链接
//a[contains(@href, "baidu")] 得到href属性包含baidu的所有链接
//a[not (contains(@href, "baidu"))] 得到所有href属性不包含baidu的链接
更多类似函数,参照http://www.w3schools.com/xsl/xsl_functions.asp
在使用XPath时,应尽量
避免使用数组索引;
避免使用与数据关系不密切的类名;
使用面向数据的类名;
ID通常都比较可靠(例外情况:以编程方式生成的包含唯一标记的ID 如“order-F5568”;此外,还需注意部分HTML中ID不唯一的情况)
python应用:爬虫框架Scrapy系统学习第一篇——xpath详解的更多相关文章
- python应用:爬虫框架Scrapy系统学习第二篇——windows下安装scrapy
windows下安装scrapy 依次执行下列操作: pip install wheel pip install lxml pip install PyOpenssl 安装Microsoft visu ...
- python应用:爬虫框架Scrapy系统学习第四篇——scrapy爬取笔趣阁小说
使用cmd创建一个scrapy项目: scrapy startproject project_name (project_name 必须以字母开头,只能包含字母.数字以及下划线<undersco ...
- python应用:爬虫框架Scrapy系统学习第三篇——初识scrapy
scrapy的最通用的爬虫流程:UR2IM U:URL R2:Request 以及 Response I:Item M:More URL 在scrapy shell中打开服务器一个网页 cmd中执行: ...
- 《精通Python爬虫框架Scrapy》学习资料
<精通Python爬虫框架Scrapy>学习资料 百度网盘:https://pan.baidu.com/s/1ACOYulLLpp9J7Q7src2rVA
- 学会Git玩转GitHub(第一篇) 入门详解 - 精简归纳
学会Git玩转GitHub(第一篇) 入门详解 - 精简归纳 JERRY_Z. ~ 2020 / 9 / 25 转载请注明出处!️ 目录 学会Git玩转GitHub(第一篇) 入门详解 - 精简归纳 ...
- python 网络爬虫框架scrapy使用说明
1 创建项目scrapy startproject tutorial 2 定义Itemimport scrapyclass DmozItem(scrapy.Item): title = scra ...
- python网络爬虫(7)爬取静态数据详解
目的 爬取http://seputu.com/数据并存储csv文件 导入库 lxml用于解析解析网页HTML等源码,提取数据.一些参考:https://www.cnblogs.com/zhangxin ...
- 系统学习前端之FormData详解
FormData 1. 概述 FormData类型其实是在XMLHttpRequest 2级定义的,它是为序列化表以及创建与表单格式相同的数据(当然是用于XHR传输)提供便利. 2. 构造函数 创建一 ...
- Flask第一篇——URL详解
原创 2018-02-14 孟船长 自动化测试实战 URL是Uniform Resource Locator的缩写,即统一资源定位符. 一个URL通常由一下几个部分组成: scheme://host: ...
随机推荐
- win10 x64 注册ZQDeviceOcx.ocx控件
正常的方式在32位系统下可行, 但是在64位系统下是不可行的. 在64位系统中正确的注册步骤是: 1. 将对应的ocx和dll放到C:\Windows\SysWOW64目录下. 2. 然后找到C:\W ...
- Java虚拟机3:内存溢出
1.前言 上一篇我们介绍了java的内存区域结构,这一篇,模拟内存溢出的几个场景,下面一个图是总体的指导思想: 2.Java堆溢出 Java堆唯一的作用就是存储对象实例,只要保证不断创建对象并且对象不 ...
- Intellij IDEA Organize Imports
使用Eclipse进行开发时,我喜欢用Ctrl + Shift + O快捷键管理Java类的导入,它可以导入所需的Java类,去除不需要的Java类. Eclipse的Organize Imports ...
- 用eclipse pydev 创建一个新py文件时 文件的coding设置问题
问题: 当安装好eclipse和pydev后,创建一个project, 创建一个新的py文件,文件头都会自带中文时间.这样在编译的时候会报错. 解决办法之一: 通过设置,可以使新建的文件的文件头自动带 ...
- 二十五、详述 IntelliJ IDEA 提交代码前的 Code Analysis 机制
在我们用 IntelliJ IDEA 向 SVN 或者 Git 提交代码的时候,IntelliJ IDEA 提供了一个自动分析代码的功能,即Perform code analysis: 如上图所示,当 ...
- 【SPJ6285 NGM2 - Another Game With Numbers】 题解
题目链接:https://www.luogu.org/problemnew/show/SP6285 唉好久之前校内模拟赛的题目 嘴上说着明白但是实现起来我的位运算太丑陋了啊! #include < ...
- VB.NET的一个邮件发送函数
''' <summary> ''' VB.NET邮件发送程序 ''' 还没用在别的服务器,不晓得能不能行,慎用! ''' </summary> ''' <param na ...
- CSU 1726: 你经历过绝望吗?两次!(bfs+优先队列)
传送门: http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1726 1726: 你经历过绝望吗?两次! Submit Page Summar ...
- STM32之系统时钟
转载:http://www.openedv.com/posts/list/302.htm 时钟系统是处理器的核心,所以在学习STM32所有外设之前,认真学习时钟系统是必要的,有助于深入理解STM32. ...
- servlet,过滤器,监听器,拦截器的区别
一.目录 1.概念 2.生命周期 3.职责 4.执行过程 二.内容 概念 1.servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性, 可以动态生成web页面它 ...