python3 [入门基础实战] 爬虫入门之xpath的学习

Xpath
Xpath全程为xml路径语言,用来确定xml文档中某部分位置的语言。

使用Xpath需要安装lxml库,lxml为Python的第三方库,安装方法可以直接下载库文件手动添加到python库文件夹下或者使用pip安装。

导入模块 from lxml import etree
Selector=etree.HTML(网页源代码) 该指令可以把网页源代码转换成可以
被Xpath识别和匹配的对象,

Selector.xpath() 括号内参数为一段符号。这样便可以识别匹配出感兴趣的内容。

在使用正则表达式来寻找感兴趣内容的时候,需要知道感兴趣内容附近内容的特征。
而Xpath则不同。

Xpath与HTML的结构:
HTML为树状结构,可以逐层展开,逐层定位。Xpath就是根据这一特性来工作的。
其中两根斜线 // 定位根节点,一根斜线 / 表示往下层寻找,其中一个HTML标签表示一层,提取文本内容则是 /text() ,要提取某个属性的内容则 /@xxx (xxx为具体属性的名字)。

首先,使用xpath提取一般内容:
根据HTML中的标签来进行定位。如下面一段简短代码:

from lxml import etree
html='''
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>测试-常规用法</title>
</head>
<body>
<div id="content">
    <ul id="useful">
        <li>这是第一条信息</li>
        <li>这是第二条信息</li>
        <li>这是第三条信息</li>
    </ul>
    <ul id=“useless”>
        <li>1不需要的信息</li>
        <li>2不需要的信息</li>
        <li>3不需要的信息</li>
    </ul>

    <div id="url">
        <a href="属性1">这个不属于属性值</a>
        <a href="属性2" href2="属性3">这个也不是属性值</a>
        <a href3="attribute">3也不是属性值</a>
   </div>
</div>

</body>
</html>
'''
selector=etree.HTML(html)

#提取文本信息
content=selector.xpath('//ul[@id="useful"]/li/text()')
for each in content:
    print each

#此语句打印出了标签a下的内容
content2=selector.xpath('//a/text()')
for each in content2:
    print each   

#提取属性
content3=selector.xpath('//a/@href')
for each in content3:
    print each

content4=selector.xpath('//a/@href2')
print content4[0]

content5=selector.xpath('//a[@href3="attribute"]/text()')
print content5[0]

其中html代表一个简单网页的源代码,而使用etree.HTML(html)将源代码html转换成xpath可以处理的对象,然后该对象调用xpath成员进行相应处理得到感兴趣的内容。
输出文本
如上面代码所示xpath成员的参数’//ul[@id=”useful”]/li/text()’该参数表示在根目录下的ul标签[]内的内容表示当有多个ul标签的时候,用中括号中的内容来定位具体哪个标签,后面的斜杠后li代表li标签/text()表示要取的是li标签下的文本内容。此时根据该语句而得到的输出为:
这是第一条信息
这是第二条信息
这是第三条信息
该语句中如果把ul后面的中括号去掉,由于html中有两处ul标签,且两处ul标签下都有li标签,因此两处ul下的li都会定位到,因而输出:
这是第一条信息
这是第二条信息
这是第三条信息
1不需要的信息
2不需要的信息
3不需要的信息

输出属性
如上面代码中提取网页的代码:
content3=selector.xpath(‘//a/@href’)
在源代码html中,href对应的等号右边为href的属性内容,也就是href的值,其定位方式与前面文本定位方式是一样的,但是取内容方式有差别,取文本内容是直接用text(),而取属性是用@xxx,xxx为要取的属性,该表达式为取出该属性具体的内容。同理,content3=selector.xpath(‘//a/@href’)取出了a标签中href3对应的属性内容。此处由于有两处标签a下都有href,因而返回两处属性都会返回,此处打印内容为:
属性1
属性2
注意,xpath取出的内容是以列表形式返回的,因而如果取出其中一个元素或者其中只有一个元素的时候,需要用访问列表元素的方式来取出。且上面的html内容比较简单,标签不复杂,因而xpath中的具体参数也比较简单,对于标签层次较多的网页文件而言,则表达式的层次结构也应该较明确,一层一层标签标示出来,否则容易导致匹配到其他有相同标签的内容上去而没有真正找出感兴趣内容。

总结

这个是从http://blog.csdn.net/dalong277/article/details/51465232 复制过来的,觉得很适合自己,而且讲的详细,容易上手。在实战过程中如果有自己不懂的地方,要学会自己去百度谷歌一下,这样学的能及时用于实战中更快。

下一篇是我用xpath爬取的内容,内容有点多,由于自己现在还没有学到多线程,只能是单线程的进行爬取。喜欢的可以给我点个赞,让我知道你从我的世界过来过。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用Python进行爬虫时,XPath是一种非常有用的工具,可以帮助您从HTML或XML文档中提取所需的数据。以下是一个简单的示例,演示如何使用PythonXPath进行爬虫实战: 首先,您需要安装必要的库。在Python中,您可以使用`lxml`库来解析HTML或XML文档,并使用`requests`库发送HTTP请求。您可以使用以下命令来安装它们: ```python pip install lxml pip install requests ``` 接下来,我们将使用`requests`库发送HTTP请求,并使用`lxml`库解析返回的HTML内容。以下是一个示例代码: ```python import requests from lxml import etree # 发送HTTP请求并获取页面内容 url = 'https://example.com' # 替换为您要爬取的网页地址 response = requests.get(url) content = response.content # 使用lxml解析HTML内容 html = etree.HTML(content) # 使用XPath提取所需的数据 data = html.xpath('//div[@class="example-class"]/text()') # 替换为您要提取数据的XPath表达式 # 打印提取的数据 for d in data: print(d) ``` 在上述示例中,我们首先发送HTTP请求并获取网页的内容。然后,我们使用`etree.HTML()`函数将内容转换为可解析的HTML对象。接下来,我们使用XPath表达式`'//div[@class="example-class"]/text()'`来提取具有`class`属性为`example-class`的`div`元素的文本内容。您可以根据实际情况调整XPath表达式以匹配您要提取的数据。 注意:在实际使用中,您可能还需要处理页面的反爬机制、处理异常情况和使用循环遍历多个页面等。此示例仅为演示基本的Python爬虫XPath使用方法。 希望这可以帮助到您!如有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值