lxml解析html时,检验XPath
2017-02-05 20:29
489 查看
这两天在研究Scrapy,在遇到用Xpath提出时,需要有Chrome的XPath helper,但老是出现错误。废话少说,还是先把测试网页保存到本地,逐步的测试提取。
selector.xpath提取后为list
[‘大家好!’]
结果为:
这是第一条信息
这是第二条信息
这是第三条信息
结果为:
http://jikexueyuan.com
http://jikexueyuan.com/sourse/
结果为:
极客学院课程库
结果为:
大家好!
需要的内容1
需要的内容2
需要的内容3
美女,
结果为:
美女, 你的微信是多少?
我左青龙, 右白虎, 上朱雀, 下玄武。 老牛在当中, 龙头在胸口。
注:这里我将list转为str。网上有许多其他方法加extract()我尝试后,发现均出错。
另外,发现网上的代码有问题。
参考如下网页,非常感谢:
http://blog.csdn.net/betabin/article/details/24392369
http://blog.csdn.net/skyeyesxy/article/details/50838003
http://blog.chinaunix.net/uid-13869856-id-5747417.html
https://segmentfault.com/q/1010000006053119/a-1020000006053611
测试文本text.html
<!DOCTYPE html> <html lang="en"> <head> <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="http://jikexueyuan.com">极客学院</a> <a href="http://jikexueyuan.com/sourse/" title="极客学院课程库">点我打开课程库</a> </div> </div> <div id="test-0">大家好!</div> <div id="test-1">需要的内容1</div> <div id="test-2">需要的内容2</div> <div id="testfault">需要的内容3</div> <div id="tiger"> 我左青龙, <span id="tiger2"> 右白虎, <ul> 上朱雀, <li>下玄武。</li> </ul> 老牛在当中, </span> 龙头在胸口。 </div> <div id="test-3">美女, <font color=red>你的微信是多少?</font> </div> </body> </html>
使用XPath对相关内容的提取
# -*- coding: utf-8 -*- from lxml import etree f = open('text.html', 'r',encoding="utf-8") html = f.read() #print (html) f.close() selector = etree.HTML(html)
selector.xpath提取后为list
#提取单个文本 content = selector.xpath('//div[@id="test-0"]/text()') print (content)
[‘大家好!’]
#提取多个文本 content = selector.xpath('//ul[@id="useful"]/li/text()') print (content) for each in content: print (each)
结果为:
这是第一条信息
这是第二条信息
这是第三条信息
#提取属性 link = selector.xpath('//a/@href') for each in link: print (each)
结果为:
http://jikexueyuan.com
http://jikexueyuan.com/sourse/
#提取title title = selector.xpath('//a/@title') print (title[0])
结果为:
极客学院课程库
# 以相同的字符开头 starts-with(@属性名称,属性字符相同部分) content = selector.xpath('//div[starts-with(@id,"test")]/text()') for each in content: print (each)
结果为:
大家好!
需要的内容1
需要的内容2
需要的内容3
美女,
#标签套标签,取出所有的标签 data = selector.xpath('//div[@id="test-3"]')[0] info = data.xpath('string(.)') info=str(info)# info为<class 'lxml.etree._ElementUnicodeResult'>,转为字符 content=" ".join(info.split()) print (content) data = selector.xpath('//div[@id="tiger"]')[0] info = data.xpath('string(.)') info=str(info)# info为<class 'lxml.etree._ElementUnicodeResult'>,转为字符 content=" ".join(info.split()) print (content)
结果为:
美女, 你的微信是多少?
我左青龙, 右白虎, 上朱雀, 下玄武。 老牛在当中, 龙头在胸口。
注:这里我将list转为str。网上有许多其他方法加extract()我尝试后,发现均出错。
另外,发现网上的代码有问题。
data = selector.xpath('//div[@id="test3"]')info = data.xpath('string(.)').extract()[0] 这样,就可以把“我左青龙,右白虎,上朱雀,下玄武。老牛在当中,龙头在胸口”整个句子提取出来,赋值给info变量。
在IDE中直接测试
from lxml import etree text=""" <div class="bd doulist-subject"> <div class="source"> 来自:豆瓣读书 </div> <div class="post"> <a href="https://book.douban.com/subject/10519369/" target="_blank"> <img width="100" src="https://img1.doubanio.com/lpic/s8869768.jpg"> </a> </div> <div class="title"> <a href="https://book.douban.com/subject/10519369/" target="_blank"> 万物生光辉 </a> </div> <div class="rating"> <span class="allstar50"></span> <span class="rating_nums">9.4</span> <span>(738人评价)</span> </div> <div class="abstract"> " 作者: [英] 吉米·哈利 <br> " 出版社: 中国城市出版社 <br> " 出版年: 2012-3 " </div> </div> """ selector = etree.HTML(text) title = selector.xpath('//div[@class="title"]/a/text()') title=title[0] title=title.replace(" ","").replace("\\n","").replace("\\r","") title=title.strip() print (title) rate = selector.xpath('//span[@class="rating_nums"]/text()') rate=rate[0] rate=rate.replace(" ","").replace("\\n","").replace("\\r","") print (rate) author = selector.xpath('//div[@class="abstract"]/text()') author=author[0] author=author.replace(" ","").replace("\\n","").replace("\\r","").replace('"',"") author=author.strip() print (author)
参考如下网页,非常感谢:
http://blog.csdn.net/betabin/article/details/24392369
http://blog.csdn.net/skyeyesxy/article/details/50838003
http://blog.chinaunix.net/uid-13869856-id-5747417.html
https://segmentfault.com/q/1010000006053119/a-1020000006053611
相关文章推荐
- python 使用lxml解析html(xpath)
- 使用lxml+xpath解析html页面
- Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
- HTML解析之五:lxml的XPath解析
- Python lxml解析HTML并用xpath获取元素
- Python:用lxml解析HTML
- 使用 XPATH 和 HTML Cleaner 解析 HTML/XML
- 使用XPath解析HTML获取网页内容
- 用XPath对Html进行解析
- 使用python的lxml解析html
- 转:Python网页解析:BeautifulSoup vs lxml.html
- 使用XPath解析html
- 使用XPath解析html
- 浅谈HtmlCleaner+XPath解析html或者xml
- Python中利用xpath解析HTML
- 【简记】用lxml解析html
- Asp.net解析HTML并利用XPATH分析提取内容
- xpath解析html的原码
- 使用Perl的HTML::TreeBuilder::XPath来解析网页内容
- 用lxml解析HTML