Python大數(shù)據(jù)之使用lxml庫解析html網(wǎng)頁文件示例
本文實例講述了Python大數(shù)據(jù)之使用lxml庫解析html網(wǎng)頁文件。分享給大家供大家參考,具體如下:
lxml是Python的一個html/xml解析并建立dom的庫,lxml的特點是功能強大,性能也不錯,xml包含了ElementTree ,html5lib ,beautfulsoup 等庫。
使用lxml前注意事項:先確保html經(jīng)過了utf-8解碼,即code =html.decode('utf-8', 'ignore'),否則會出現(xiàn)解析出錯情況。因為中文被編碼成utf-8之后變成 '/u2541' 之類的形式,lxml一遇到 "/"就會認為其標簽結(jié)束。
具體用法:元素節(jié)點操作
1、 解析HTMl建立DOM
from lxml import etree dom = etree.HTML(html)
2、 查看dom中子元素的個數(shù) len(dom)
3、 查看某節(jié)點的內(nèi)容:etree.tostring(dom[0])
4、 獲取節(jié)點的標簽名稱:dom[0].tag
5、 獲取某節(jié)點的父節(jié)點:dom[0].getparent()
6、 獲取某節(jié)點的屬性節(jié)點的內(nèi)容:dom[0].get("屬性名稱")
對xpath路徑的支持:
XPath即為XML路徑語言,是用一種類似目錄樹的方法來描述在XML文檔中的路徑。比如用"/"來作為上下層級間的分隔。第一個"/"表示文檔的根節(jié)點(注意,不是指文檔最外層的tag節(jié)點,而是指文檔本身)。比如對于一個HTML文件來說,最外層的節(jié)點應(yīng)該是"/html"。
xpath選取元素的方式:
1、 絕對路徑,如page.xpath("/html/body/p"),它會找到body這個節(jié)點下所有的p標簽
2、 相對路徑,page.xpath("http://p"),它會找到整個html代碼里的所有p標簽。

xpath篩選方式:
1、 選取元素時一個列表,可通過索引查找[n]
2、 通過屬性值篩選元素p =page.xpath("http://p[@style='font-size:200%']")
3、 如果沒有屬性可以通過text()(獲取元素中文本)、position()(獲取元素位置)、last()等進行篩選

獲取屬性值
dom.xpath(.//a/@href)
獲取文本
dom.xpath(".//a/text()")
示例代碼:
#!/usr/bin/python
# -*- coding:utf-8 -*-
from scrapy.spiders import Spider
from lxml import etree
from jredu.items import JreduItem
class JreduSpider(Spider):
name = 'tt' #爬蟲的名字,必須的,唯一的
allowed_domains = ['sohu.com']
start_urls = [
'http://www.sohu.com'
]
def parse(self, response):
content = response.body.decode('utf-8')
dom = etree.HTML(content)
for ul in dom.xpath("http://div[@class='focus-news-box']/div[@class='list16']/ul"):
lis = ul.xpath("./li")
for li in lis:
item = JreduItem() #定義對象
if ul.index(li) == 0:
strong = li.xpath("./a/strong/text()")
li.xpath("./a/@href")
item['title']= strong[0]
item['href'] = li.xpath("./a/@href")[0]
else:
la = li.xpath("./a[last()]/text()")
item['title'] = la[0]
item['href'] = li.xpath("./a[last()]/href")[0]
yield item
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python Socket編程技巧總結(jié)》、《Python正則表達式用法總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對大家Python程序設(shè)計有所幫助。
相關(guān)文章
Django自定義插件實現(xiàn)網(wǎng)站登錄驗證碼功能
這篇文章主要為大家詳細介紹了Django自定義插件實現(xiàn)網(wǎng)站登錄驗證碼功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04
解決pip安裝tensorflow中出現(xiàn)的no module named tensorflow.python 問題方法
這篇文章主要介紹了解決pip安裝tensorflow中出現(xiàn)的no module named tensorflow.python 問題方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2021-02-02
詳解python while 函數(shù)及while和for的區(qū)別
這篇文章主要介紹了python while 函數(shù)及while和for的區(qū)別 ,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2018-09-09
如何利用Python連接MySQL數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)儲存
當我們學(xué)習了mysql數(shù)據(jù)庫后,我們會想著該如何將python和mysql結(jié)合起來運用,下面這篇文章主要給大家介紹了關(guān)于如何利用Python連接MySQL數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)儲存的相關(guān)資料,需要的朋友可以參考下2021-11-11
Python光學(xué)仿真學(xué)習Gauss高斯光束在空間中的分布
這篇文章主要介紹了Python光學(xué)仿真學(xué)習中Gauss高斯光束在空間中的分布理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2021-10-10
python機器學(xué)習之神經(jīng)網(wǎng)絡(luò)實現(xiàn)
這篇文章主要為大家詳細介紹了python機器學(xué)習之神經(jīng)網(wǎng)絡(luò)的實現(xiàn)方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-10-10

