Python-17:X-Path

 1、X-PATH:XML路径语言

  X-Path是 一门语言

  X-Path可以在XML文档中查找信息

  X-Path也支持HTML

  X-Path通过元素和属性进行导航 

  【X-Path可以用来提取信息

     X-Path比正则表达式厉害

     X-Path比正则表达式简单】

2、如何使用

  安装lxml库

  from lxml import etree

  Selector=etree.HTML(网页源代码)

  Selector.xpath(一段神奇的符号)

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>这是自定义html网页的一个标题</title>
</head>
<body>
<div id="content">
    <a href="https://www.cnblogs.com/jiyongxin">跳转到我的博客</a>
    <ul id="useful">
        <li>这是列表第一项</li>
        <li>这是列表第二项</li>
        <li>这是列表第三项</li>
        <li>这是列表第四项</li>
    </ul>
    <ul id="nouse">
        <li>这是无用列表第一项</li>
        <li>这是无用列表第二项</li>
        <li>这是无用列表第三项</li>
        <li>这是无用列表第四项</li>
    </ul>
    <a href="https://www.baidu.com">跳转到百度</a>
    <a href="https://www.zhihu.com">跳转到知乎</a>
</div>
</body>
</html>

 

 

#coding:utf-8
from lxml import etree
html='''
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>这是自定义html网页的一个标题</title>
</head>
<body>
<div id="content">
    <a href="https://www.cnblogs.com/jiyongxin">跳转到我的博客</a>
    <ul id="useful">
        <li>这是列表第一项</li>
        <li>这是列表第二项</li>
        <li>这是列表第三项</li>
        <li>这是列表第四项</li>
    </ul>
    <ul id="nouse">
        <li>这是无用列表第一项</li>
        <li>这是无用列表第二项</li>
        <li>这是无用列表第三项</li>
        <li>这是无用列表第四项</li>
    </ul>
    <a href="https://www.baidu.com">跳转到百度</a>
    <a href="https://www.zhihu.com">跳转到知乎</a>
</div>
</body>
</html>
'''
Seletor=etree.HTML(html)
#提取文本
content=Seletor.xpath('//div[@id="content"]/ul[@id="useful"]/li/text()')
for each in content:
    print each
link=Seletor.xpath('//a/@href')
for each in link:
    print each

 

输出结果为:

  

 //是定位根节点

/是往下层寻找

提取文本内容/text()

提取属性内容/@xxxx

 

 

 X-path特殊用法

starts-with
#coding:utf-8
from lxml import  etree
html1='''
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="test-1">需要的内容一</div>
    <div id="test-2">需要的内容二</div>
    <div id="testfault">需要的内容三</div>
</body>
</html>
'''
selector=etree.HTML(html1)
content=selector.xpath('//div[starts-with(@id,"test-")]/text()')
for each in content:
    print each

 

    、

 

#coding:utf-8
from lxml import  etree
html1='''
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="test-3">
        直接文字内容1
        <span>在span标签中包含的非直接内容</span>
        直接文字内容2
    </div>
   
</body>
</html>
'''
selector=etree.HTML(html1)
content=selector.xpath('//div[@id="test-3"]/text()')
for each in content:
    print each

 

 输出结果为

 

 

 无法将span 包含的内容显示出来

selector=etree.HTML(html1)
data=selector.xpath('//div[@id="test-3"]')[0]
info=data.xpath("string(.)")
content=info.replace('\n','').replace(' ','')
print content

输出结果为:

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

python并行化介绍

多个线程同时进行处理:高效、快速

map的使用:

  map函数一手包办了序列操作、参数传递和结果保存等一些列的操作 

  from multiprocessing.dummy import pool

  pool=Pool(4) #我的电脑是四核的,所以在这里写4,如果你的是8核可以写8,更高效

  result=pool.map(扒取函数,网址列表)

 

posted @ 2017-06-20 16:53  小新丶  阅读(677)  评论(0编辑  收藏  举报