爬蟲入門6(Lxml與Xpath)

Lxml庫的使用:

1.修正HTML代碼
from lxml import etree
html=etree.HTML(text) #Lxml庫解析數(shù)據(jù)翩迈,為Element對象
result=etree.tostring(html) #此時(shí)可以自動(dòng)修正HTML代碼,補(bǔ)齊標(biāo)簽等等

2.讀取HTML文件
可以通過pycharm新建HTML文件盔夜,然后用代碼寫網(wǎng)頁
讀取本地的HTML文件使用parse()方法
from lxml import etree
html=etree.parse(r"文件路徑")
result=etree.tostring(html,pretty_print=True)

3.解析HTML文件
使用requests獲取HTML文件后负饲,村咋子res中
html=etree.HTML(res.text)
result=etree.tostring(html) #實(shí)現(xiàn)對其的解析

Xpath語法

<user>
<name>xiao ming</name>
<sex>man</sex>
<id>34</id>
<goal>89</goal>
</user>
1.父節(jié)點(diǎn)
每個(gè)元素及屬性都有一個(gè)父節(jié)點(diǎn),在上面的代碼中喂链,user元素是name返十、sex、id及goal元素的父節(jié)點(diǎn)椭微。
2.子節(jié)點(diǎn)
元素節(jié)點(diǎn)可有0個(gè)洞坑、一個(gè)或多個(gè)子節(jié)點(diǎn),在上面的代碼中蝇率,name迟杂、sex、id及goal元素都是user元素的子節(jié)點(diǎn)本慕。
3.同胞結(jié)點(diǎn)
同胞節(jié)點(diǎn)擁有相同的父節(jié)點(diǎn)排拷,在上面的代碼中,name锅尘、sex监氢、id及goal元素都是同胞節(jié)點(diǎn)
4.先輩結(jié)點(diǎn)
先輩節(jié)點(diǎn)指某節(jié)點(diǎn)的父、父的父節(jié)點(diǎn)等鉴象,在下面的例子中忙菠,name元素的先輩是user元素和user_database元素:
<user_database>
<user>
<name>xiao ming</name>
<sex>man</sex>
<id>34</id>
<goal>89</goal>
</user>
</user_database>
5.后代節(jié)點(diǎn)指某個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn)、子節(jié)點(diǎn)的子節(jié)點(diǎn)等纺弊,在下面的例子中,user_database的后代是user骡男、name淆游、sex、id及goal元素:
<user_database>
<user>
<name>xiao ming</name>
<sex>man</sex>
<id>34</id>
<goal>89</goal>
</user>
</user_database>

節(jié)點(diǎn)選擇

Xpath使用路徑表達(dá)式在XML文檔中選取節(jié)點(diǎn)。節(jié)點(diǎn)是通過演著路徑或者step來選取的犹菱,如下表:


image.png

image.png

image.png

作者:OzanShareing
鏈接:http://www.reibang.com/p/8e3aff9919d4
來源:簡書
簡書著作權(quán)歸作者所有拾稳,任何形式的轉(zhuǎn)載都請聯(lián)系作者獲得授權(quán)并注明出處。

使用技巧

從瀏覽器上檢查尋找腊脱,然后復(fù)制出xpath路徑访得,這就是某一個(gè)的,通過觀察對比得到所有的
//*[@id="qiushi_tag_121525160"]/div[1]/a[2]/h2
注意在后面加/text()提取文字信息陕凹,然后得到的是一個(gè)列表悍抑,用切片法得到內(nèi)容[0],再用strip()語法去掉換行符

用xpath爬取多個(gè)id信息

可以用:
1.id=selector.xpath('//div/div[1]/a[2]/h2/text()')
for i in id:
print(i.strip())
2.id=selector.xpath('//div[@class="article block untagged mb15 typs_hot"]/div[1]/a[2]/h2/text()')
for i in id:
print(i.strip())

有時(shí)候會(huì)遇到相同的字符開頭的多個(gè)標(biāo)簽:

<li class="tag-1">需要的內(nèi)容1</li>
<li class="tag-2">需要的內(nèi)容2</li>
<li class="tag-3">需要的內(nèi)容3</li>

想同時(shí)爬取時(shí)杜耙,不需要構(gòu)造多個(gè)Xpath路徑搜骡,通過starts-with()便可以獲取多個(gè)標(biāo)簽內(nèi)容。
如下:
starts-with()方法
contents = selector.xpath('//li[starts-with(@class,"tag")]/text() ')

string(.)方法
當(dāng)遇到標(biāo)簽套標(biāo)簽情況時(shí):
<div class="red">需要的內(nèi)容1
<h1>需要的內(nèi)容2</h1>
</div>>
想同時(shí)獲取文本內(nèi)容佑女,可以通過string(.)完成:
from lxml import etree

html2 = '''
<div class="red">需要的內(nèi)容1
<h1>需要的內(nèi)容2</h1>
</div>>
'''

selector = etree.HTML(html2)

content1 = selector.xpath('//div[@class="red"]')[0]

content2 = content1.xpath('string(.)')
print(content2)

string(.)方法可用于標(biāo)簽套標(biāo)簽情況

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末记靡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子团驱,更是在濱河造成了極大的恐慌摸吠,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,686評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嚎花,死亡現(xiàn)場離奇詭異蜕便,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)贩幻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評論 3 385
  • 文/潘曉璐 我一進(jìn)店門轿腺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人丛楚,你說我怎么就攤上這事族壳。” “怎么了趣些?”我有些...
    開封第一講書人閱讀 158,160評論 0 348
  • 文/不壞的土叔 我叫張陵仿荆,是天一觀的道長。 經(jīng)常有香客問我坏平,道長拢操,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,736評論 1 284
  • 正文 為了忘掉前任舶替,我火速辦了婚禮令境,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘顾瞪。我一直安慰自己舔庶,他們只是感情好抛蚁,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,847評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惕橙,像睡著了一般瞧甩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上弥鹦,一...
    開封第一講書人閱讀 50,043評論 1 291
  • 那天肚逸,我揣著相機(jī)與錄音,去河邊找鬼彬坏。 笑死朦促,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的苍鲜。 我是一名探鬼主播思灰,決...
    沈念sama閱讀 39,129評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼混滔!你這毒婦竟也來了洒疚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,872評論 0 268
  • 序言:老撾萬榮一對情侶失蹤坯屿,失蹤者是張志新(化名)和其女友劉穎油湖,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體领跛,經(jīng)...
    沈念sama閱讀 44,318評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乏德,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,645評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吠昭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喊括。...
    茶點(diǎn)故事閱讀 38,777評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖矢棚,靈堂內(nèi)的尸體忽然破棺而出郑什,到底是詐尸還是另有隱情,我是刑警寧澤蒲肋,帶...
    沈念sama閱讀 34,470評論 4 333
  • 正文 年R本政府宣布蘑拯,位于F島的核電站,受9級特大地震影響兜粘,放射性物質(zhì)發(fā)生泄漏申窘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,126評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧扫俺,春花似錦娶吞、人聲如沸玄窝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恩脂。三九已至,卻和暖如春趣斤,著一層夾襖步出監(jiān)牢的瞬間俩块,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評論 1 267
  • 我被黑心中介騙來泰國打工浓领, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留玉凯,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,589評論 2 362
  • 正文 我出身青樓联贩,卻偏偏與公主長得像漫仆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子泪幌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,687評論 2 351

推薦閱讀更多精彩內(nèi)容