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的获取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值