導航:首頁 > 編程語言 > python取html節點內容

python取html節點內容

發布時間:2022-08-20 04:26:42

python怎樣抓取當前頁面HTML內容

當然這樣子也是可以的,不過通用點的方法是用beautifulsoup庫去定位id=phoneCodestatus

Ⅱ 怎麼用python的BeautifulSoup來獲取html中div的內容

# -*- coding:utf-8 -*-

#標簽操作

from bs4 import BeautifulSoup
import urllib.request
import re

#如果是網址,可以用這個辦法來讀取網頁
#html_doc = ""
#req = urllib.request.Request(html_doc)
#webpage = urllib.request.urlopen(req)
#html = webpage.read()

html="""
"""
soup = BeautifulSoup(html, 'html.parser') #文檔對象

# 類名為xxx而且文本內容為hahaha的div
for k in soup.find_all('div',class_='atcTit_more'):#,string='更多'
print(k)

Ⅲ PYTHON,SELENIUM如何獲取HTML內元素,


先定位到,然後接上後面的.get_property('id或者name')

Ⅳ Python爬蟲怎麼循環截取html標簽中間的內容

如果是中間的數據直接就用bs4最簡單

from bs4 import BeautifulSoup

#這里是請求過來的額數據處理,提取標簽

html = BeautifulSoup(response.text, 'html.parser')

body = html.body # 獲取body部分數據

div = body.find("div",{'id','today'}) #用find去找div標簽,id叫 today的標簽裡面的數據

就可以了

如果要提取標簽內容比如value的值

div = body.find("input",id='hidden_title')['value']

Ⅳ 如何在python中使用xpath

在進行網頁抓取的時候,分析定位html節點是獲取抓取信息的關鍵,目前我用的是lxml模塊(用來分析XML文檔結構的,當然也能分析html結構), 利用其lxml.html的xpath對html進行分析,獲取抓取信息。
首先,我們需要安裝一個支持xpath的python庫。目前在libxml2的網站上被推薦的python binding是lxml,也有beautifulsoup,不嫌麻煩的話還可以自己用正則表達式去構建,本文以lxml為例講解。
假設有如下的HTML文檔:

1 <html>
2 <body>
3 <form>
4 <div id='leftmenu'>
5 <h3>text</h3>
6 <ul id=』china』><!-- first location -->
7 <li>...</li>
8 <li>...</li>
9 ......
10 </ul>
11 <ul id=』england』><!-- second location-->
12 <li>...</li>
13 <li>...</li>
14 ......
15 </ul>
16 </div>
17 </form>
18 </body>
19 </html>

直接使用lxml處理:
1 import codecs
2 from lxml import etree
3 f=codecs.open("ceshi.html","r","utf-8")
4 content=f.read()
5 f.close()
6 tree=etree.HTML(content)

etree提供了HTML這個解析函數,現在我們可以直接對HTML使用xpath了,是不是有點小激動,現在就嘗試下吧。

在使用xpath之前我們先來看看作為對照的jQuery和RE。
在jQuery里要處理這種東西就很簡單,特別是假如那個ul節點有id的話(比如是<ul id=』china』>):
$("#china").each(function(){...});

具體到此處是:
$("#leftmenu").children("h3:contains('text')").next("ul").each(function(){...});

找到id為leftmenu的節點,在其下找到一個內容包含為」text」的h3節點,再取其接下來的一個ul節點。
在python里要是用RE來處理就略麻煩一些:
block_pattern=re.compile(u"<h3>檔案</h3>(.*?)<h3>", re.I | re.S)
m=block_pattern.findall(content)
item_pattern=re.compile(u"<li>(.*?)</li>", re.I | re.S)
items=item_pattern.findall(m[0])
for i in items:
print i

那麼用xpath要怎麼做呢?其實跟jQuery是差不多的:
nodes=tree.xpath("/descendant::ul[@id='china']")

當然,現在沒有id的話也就只能用類似於jQuery的方法了。完整的xpath應該是這樣寫的(注意,原文件中的TAG有大小寫的情況,但是在XPATH里只能用小寫):
nodes=tree.xpath(u"/html/body/form/div[@id='leftmenu']/h3[text()='text']/following-sibling::ul[1]")

更簡單的方法就是像jQuery那樣直接根據id定位:
nodes=tree.xpath(u"//div[@id='leftmenu']/h3[text()='text']/following-sibling::ul[1]")

這兩種方法返回的結果中,nodes[0]就是那個「text」的h3節點後面緊跟的第一個ul節點,這樣就可以列出後面所有的ul節點內容了。
如果ul節點下面還有其他的節點,我們要找到更深節點的內容,如下的循環就是把這些節點的文本內容列出:
nodes=nodes[0].xpath("li/a")
for n in nodes:
print n.text

對比三種方法應該可以看出xpath和jQuery對於頁面的解析都是基於XML的語義進行,而RE則純粹是基於plain text。RE對付簡單的頁面是沒有問題,如果頁面結構復雜度較高的時候(比如一堆的DIV來回嵌套之類),設計一個恰當的RE pattern可能會遠比寫一個xpath要復雜。特別是目前主流的基於CSS的頁面設計方式,其中大部分關鍵節點都會有id――對於使用jQuery的頁面來說則更是如此,這時xpath相比RE就有了決定性的優勢。

附錄:基本XPATH語法介紹,詳細請參考XPath的官方文檔
XPATH基本上是用一種類似目錄樹的方法來描述在XML文檔中的路徑。比如用「/」來作為上下層級間的分隔。第一個「/」表示文檔的根節點(注意,不是指文檔最外層的tag節點,而是指文檔本身)。比如對於一個HTML文件來說,最外層的節點應該是」/html」。
同樣的,「..」和「.」分別被用來表示父節點和本節點。
XPATH返回的不一定就是唯一的節點,而是符合條件的所有節點。比如在HTML文檔里使用「/html/head/scrpt」就會把head里的所有script節點都取出來。
為了縮小定位范圍,往往還需要增加過濾條件。過濾的方法就是用「[」「]」把過濾條件加上。比如在HTML文檔里使用「/html/body/div[@id='main']」,即可取出body里id為main的div節點。
其中@id表示屬性id,類似的還可以使用如@name, @value, @href, @src, @class….
而 函數text()的意思則是取得節點包含的文本。比如:<div>hello<p>world</p>< /div>中,用」div[text()='hello']「即可取得這個div,而world則是p的text()。
函數position()的意思是取得節點的位置。比如「li[position()=2]」表示取得第二個li節點,它也可以被省略為「li[2]」。
不過要注意的是數字定位和過濾 條件的順序。比如「ul/li[5][@name='hello']」表示取ul下第五項li,並且其name必須是hello,否則返回空。而如果用 「ul/li[@name='hello'][5]」的意思就不同,它表示尋找ul下第五個name為」hello「的li節點。
此外,「*」可以代替所有的節點名,比如用」/html/body/*/span」可以取出body下第二級的所有span,而不管它上一級是div還是p或是其它什麼東東。
而 「descendant::」前綴可以指代任意多層的中間節點,它也可以被省略成一個「/」。比如在整個HTML文檔中查找id為「leftmenu」的 div,可以用「/descendant::div[@id='leftmenu']」,也可以簡單地使用「 //div[@id='leftmenu']」。
至於「following-sibling::」前綴就如其名所說,表示同一層的下一個節點。」following-sibling::*」就是任意下一個節點,而「following-sibling::ul」就是下一個ul節點。

Ⅵ 怎樣在python中提取html源文件中的內容(去掉標簽後的純網頁的內容)求大神指導,謝謝!

用正則把尖括弧的標記都替換為""

\<\w*\>[\s\S]*\<\/\w*\>

Ⅶ python可以爬取本地html頁面信息嗎

可以的,主要是把URL換成本地HTML頁面的目錄就好了。

Ⅷ python怎麼獲取html中指定行內容

一般使用BeautifulSoup,是比較簡單的
soup=BeaitifulSoup(html,'html.parser')
要找到某各元素使用find_all方法就行
for div in soup.find_all('div'):
但是經常會遇到網站有反爬的設置,比如子結點中含有換行符,只要寫個函數去掉子結點間的換行符就行。

Ⅸ 如何用Python爬取出HTML指定標簽內的文本

你好!

可以通過lxml來獲取指定標簽的內容。

#安裝lxml
pipinstalllxml

importrequests
fromlxmlimporthtml

defgetHTMLText(url):
....

etree=html.etree
root=etree.HTML(getHTMLText(url))
#這里得到一個表格內tr的集合
trArr=root.xpath("//div[@class='news-text']/table/tbody/tr");

#循環顯示tr裡面的內容
fortrintrArr:
rank=tr.xpath("./td[1]/text()")[0]
name=tr.xpath("./td[2]/div/text()")[0]
prov=tr.xpath("./td[3]/text()")[0]
strLen=22-len(name.encode('GBK'))+len(name)
print('排名:{:<3},學校名稱:{:<{}} ,省份:{}'.format(rank,name,strLen,prov))

希望對你有幫助!

Ⅹ 為什麼用python提取html不全

用python提取html不全的原因:

現在的網站上面有很多的反爬措施,最常見的就是json非同步載入,網頁上面的數據是json代碼載入出來的,所以爬取的html信息不全

具體示例如下:

瀏覽器顯示的內容

實際上爬蟲訪問鏈接得到的內容:

更多Python知識,請關註:Python自學網!!

閱讀全文

與python取html節點內容相關的資料

熱點內容
隨車拍app綁定什麼設備 瀏覽:893
方維團購系統源碼 瀏覽:988
linux反彈shell 瀏覽:152
列印機介面加密狗還能用嗎 瀏覽:299
二板股票源碼 瀏覽:446
度人經pdf 瀏覽:902
怎麼配置android遠程伺服器地址 瀏覽:960
java程序員看哪些書 瀏覽:943
什麼app可以免費和外國人聊天 瀏覽:796
pdf手寫筆 瀏覽:182
別永遠傷在童年pdf 瀏覽:990
愛上北斗星男友在哪個app上看 瀏覽:421
主力散戶派發源碼 瀏覽:671
linux如何修復伺服器時間 瀏覽:61
榮縣優途網約車app叫什麼 瀏覽:479
百姓網app截圖是什麼意思 瀏覽:229
php如何嵌入html 瀏覽:817
解壓專家怎麼傳輸 瀏覽:745
如何共享伺服器的網路連接 瀏覽:136
程序員簡易表白代碼 瀏覽:170