python 安装xpath_Python网络爬虫(四)- XPath1.XPath2.XPath在python中的应用

目录:

1.XPath

XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。它使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。

XPath语法

2.XPath在python中的应用xpath在Python中有一个第三方库,支持~ lxml

注意:不要直接使用pip install lxml去安装~直接安装很容易安装一个空壳!

安装pip,主要参考博客: 在shell中输入import pip; print(pip.pep425tags.get_supported())可以获取到pip支持的文件名还有版本xpath的安装

通过wheel方式安装

下载对应的wheel文件【和Python版本对应的】

安装wheel插件 :python2 -m pip install wheel

根据下载的本地文件安装lxml:切换到whl文件所在的路径,进行安装

python2 -m pip install lxml-3.8.0-cp27-none-win32.whlwheel名一定要跟pip支持的文件名和版本符合

xpath的使用

获取文本内容用 text()

获取注释用 comment()

获取其它任何属性用@xx,如 @href

@src

@value

3.XPath中的text()和string()区别

1.XPath中的text()和string()本质区别text()是一个node test,而string()是一个函数,data()是一个函数且可以保留数据类型。此外,还有点号(.)表示当前节点。

2.XML例子:

_知几

用例举例text()book/author/text()

string()book/author/string()

data()book/author/data()

.book/author/.

3.特殊用例

XML例子:

pythondjango爬虫

20

0.8

text() 经常在XPath表达式的最后看到text(),它仅仅返回所指元素的文本内容。let $x := book/author/text() return $x

返回的结果是python 爬虫,其中的django不属于author直接的节点内容。string() string()函数会得到所指元素的所有节点文本内容,这些文本讲会被拼接成一个字符串。let $x := book/author/string() return $x

返回的内容是python django 爬虫。data()

大多数时候,data()函数和string()函数通用,而且不建议经常使用data()函数,有数据表明,该函数会影响XPath的性能。let $x := book/pricing/string() return $x

返回的是200.8

let $x := book/pricing/data() return $x

这样将返回分开的20和0.8,他们的类型并不是字符串而是>xs:anyAtomicType,于是就可以使用数学函数做一定操作。

let $x := book/pricing/price/data() let $y := book/pricing/discount/data() return $x*$y

比如上面这个例子,就只能使用data(),不能使用text()或string(),因为XPath不支持字符串做数学运算。

text()不是函数,XML结构的细微变化,可能会使得结果与预期不符,应该尽量少用,data()作为特殊用途的函数,可能会出现性能问题,如无特殊需要尽量不用,string()函数可以满足大部分的需求。

4.爬取诛仙前50章内容

主要分三个步骤:

(1)分析小说网址构成;

(2)获取网页,并分离出小说章节名和章节内容;

(3)写入txt文档。

代码操作:# -*- coding:utf-8 -*-

import urllib,urllib2,re

from lxml import etree

#定义函数,爬取对应的数据

def getText(url,file_name):

print('开始爬取第%s章的内容'%file_name)

#伪装请求头

my_headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36',

}

request = urllib2.Request(url,headers=my_headers)

content = urllib2.urlopen(request).read()

return content

#定义函数,保存爬取到的数据

def save(content):

xml = etree.HTML(content)

datas = xml.xpath('/html/body/div[@id="main"]/h1 | /html/body/div[@id="main"]/p')

data = datas[2].xpath('string(.)').encode('utf-8')

name = datas[0].xpath('string(.)')

print name

print('第%s章的内容爬取完成' % file_name)

with open('txt/%s'%name+'.txt', 'wb') as f:

f.write(data)

#定义主程序接口

if __name__ == '__main__':

x=41277

while x

url = 'http://www.ty2016.net/net/zhuxian/'+str(x)+'.html'

x+=1

file_name = str(x-41278)

try:

content = getText(url,file_name)

save(content)

except Exception,a:

print a

从本地可以看到已经爬取到相关内容

注解:Xpath的获取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276671.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

团队升级

2019独角兽企业重金招聘Python工程师标准>>> 转载于:https://my.oschina.net/yulongblog/blog/2988702

设计模式简介

深入理解面向对象 向下:深入理解三大面向对象机制 封装,隐藏内部实现 继承,复用现有代码  多态,改写对象行为 向上:深刻把握面向对象机制所带来的抽象意义,理解如何使用这些机制来表达现实世界&#xff0c…

Css3: gradient背景渐变

Css3: gradient背景渐变 原文链接&#xff1a;http://kk073000.blog.163.com/blog/static/34826942012123111322691/ css3实现了背景渐变。 <gradient> [ <linear-gradient> | <radial-gradient> | <repeating-linear-gradient> | <repeating-r…

模板方法

重构的关键技法&#xff1a; 静态 -> 动态 早绑定 -> 晚绑定 继承 -> 组合 编译时依赖 -> 运行时依赖 紧耦合 -> 松耦合 "组件协作"模式 现代软件专业分工之后的第一个结果是“框架与应用程序的划分”&#xff0c;“组件协作”模式通过晚期绑定&#…

聚类 python_python中实现k-means聚类算法详解

算法优缺点&#xff1a; 优点&#xff1a;容易实现 缺点&#xff1a;可能收敛到局部最小值&#xff0c;在大规模数据集上收敛较慢 使用数据类型&#xff1a;数值型数据 算法思想 k-means算法实际上就是通过计算不同样本间的距离来判断他们的相近关系的&#xff0c;相近的就会放…

python笔试常见题

1、冒泡排序&#xff1a; 冒泡排序算是最基本的python算法了。也算python面试遇到问的最多的了。 如果是封装成函数。代码如下&#xff1a; 如果初始就一个字典。那么代码为&#xff1a; 冒泡排序的本质就是两两比较。根据结果调换位置。最终达到一个排序的效果。 注&#xff1…

固定资产打开提示:上年度数据未结转!

问题现象&#xff1a;固定资产打开提示&#xff1a;上年度数据未结转&#xff01; 问题分析&#xff1a;服务器出问题后&#xff0c;数据库UFSYSTEM丢失&#xff0c;重新建账后年度数据覆盖后出现的&#xff0c;那么问题应该出在UFSYSTEM库UA_ACCOUNT_SUB表与年度库Accinformat…

windows MySQL 5+ 服务手动安装

MySQL 5 服务手动安装的方法&#xff1a;运行cmd&#xff0c;进入mysql的安装目录&#xff1a; C:\Users\aministrator> D: D:\> cd MySQL Server 5.6\bin D:\MySQL Server 5.6\bin>在bin目录中运行mysqld.exe -install命令&#xff0c;安装不完成会有提示信息。#1、手…

Kotlin防止按钮多次点击

刚开始写kotlin 这段代码写的可能有问题 望指正 object ViewClickDelay {var hash: Int 0var lastClickTime: Long 0var SPACE_TIME: Long 3000 }infix fun View.clickDelay(clickAction: () -> Unit) {this.setOnClickListener {if (this.hashCode() ! hash) {hash thi…

C#网络编程(同步传输字符串) - Part.2

服务端客户端通信 在与服务端的连接建立以后&#xff0c;我们就可以通过此连接来发送和接收数据。端口与端口之间以流&#xff08;Stream&#xff09;的形式传输数据&#xff0c;因为几乎任何对象都可以保存到流中&#xff0c;所以实际上可以在客户端与服务端之间传输任何类型的…

Factory Method工厂方法

“对象创建“模式 通过”对象创建“模式绕开new&#xff0c;来避免对象创建(new)过程中所导致的紧耦合&#xff08;以来具体类&#xff09;&#xff0c;从而支持对象创建的稳定。它是接口抽象之后的第一部工作。 典型模式&#xff1a;Factory Method&#xff0c;Abstract Facto…

centos 关闭防火墙_CentOS7操作系统下如何关闭防火墙

centos系统如果不关闭防火墙在使用中会遇到不少问题&#xff0c;而且centos7和centos6关闭防火墙的方式不一样。centos6:1.永久性生效&#xff0c;重启后不会复原开启&#xff1a; chkconfig iptables on关闭&#xff1a; chkconfig iptables off2.即时生效&#xff0c;重启后复…

web 网页按比例显示图片 js

原文链接&#xff1a;http://blog.csdn.net/liqinghuiyx/article/details/5442349 在动态站点上经常需要上传自己的图片&#xff0c;而这些图片的大小是未知的&#xff0c;在显示成缩略图的时候必须进行按比例的缩放才能美观地显示。以最近做的golf网站&#xff08;http://www…

黑马C++设计模式1

设计模式的基础是&#xff1a;多态。 设计模式综览表&#xff1a; 单例模式&#xff1a;是保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。 简单工厂模式&#xff1a;通过专门顶一个一个类来负责创建其它类的实例&#xff0c;被创建的实例通常都具有共同的父…

对于未来的一点思考

最近在思考一个问题&#xff1a;以后的发展路线。   自己算是走上了IT的道路&#xff0c;但现在也只是在程序员阶段&#xff0c;当然还未毕业&#xff0c;以后的路还很长&#xff0c;但是这个问题确是现在或以后不得不面对的一个问题。  上学期未那两个月&#xff0c;去了N…

深入解析react关于事件绑定this的四种方式

这篇文章主要介绍了详解react关于事件绑定this的四种方式&#xff0c;写的十分的全面细致&#xff0c;具有一定的参考价值&#xff0c;对此有需要的朋友可以参考学习下。如有不足之处&#xff0c;欢迎批评指正。 在react组件中&#xff0c;每个方法的上下文都会指向该组件的实例…

Apache的认证、授权、访问控制

原文链接&#xff1a; http://man.chinaunix.net/newsoft/Apache2.2_chinese_manual/howto/auth.html Apache认证、授权、访问控制 认证(Authentication)是指任何识别用户身份的过程。授权(Authorization)是允许特定用户访问特定区域或信息的过程。 相关模块和指令 认证和授权…

黑马C++设计模式2

简单工厂模式 //一般来说&#xff0c;自己创建一个对象的方法是在自己写的业务函数中直接new一个对象出来//但是现实需求&#xff0c;我不想创建对象&#xff0c;我只想拿来用。&#xff08;创建类的步骤比较复杂&#xff09; //好处&#xff0c;1、客户端和具体实现类解耦。2…

[转]Struts 2.1发布

作者 Ian Roughley译者 崔康 发布于 2009年2月4日 上午8时13分 Struts2框架刚刚发布最新2.1版。该版本做了重大升级&#xff0c;包括重构更多代码到插件框架、通过增加convention插件减少XML配置和改进REST支持。 我采访了Musachy Barroso——该版本的一位开发人员&#xff0c…

dim private public static_PHP中const,static,public,private,protected的区别

const: 定义常量&#xff0c;一般定义后不可改变static: 静态&#xff0c;类名可以访问public: 表示全局&#xff0c;类内部外部子类都可以访问&#xff1b;private: 表示私有的&#xff0c;只有本类内部可以使用&#xff1b;protected: 表示受保护的&#xff0c;只有本类或子类…