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(扒取函数,网址列表)