xpath是在XML文檔中搜素內(nèi)容的一種語言。html是xml的一個子集。使用xpath需要安裝lxml模塊。
1.1 練習(xí)1
from lxml import etree
xml = """1 野花貶低想 1.23 臭豆腐 周大強(qiáng) 周芷若 周杰倫 蔡依林
惹人
再見 胖胖陳 胖胖不陳 """
tree = etree.XML(xml) # XML()用來讀取xml文件
# res = tree.xpath("/book/name") # /表示層級關(guān)系,第一個/代表根節(jié)點(diǎn)。
# res = tree.xpath("/book/name/text()") # text()代表拿文本
# res = tree.xpath("/book/author//nick/text()") # //表示后代
# res = tree.xpath("/book/author/*/nick/text()") # *表示任意的節(jié)點(diǎn),通配符。只提取想要的部分
res = tree.xpath("/book//nick/text()") #拿book下所有的nick中的內(nèi)容
print(res)
1.2 練習(xí)2?
(1)b.html文件
Title - 百度
- 谷歌
- 搜狗
- 飛機(jī)
- 大炮
- 火車
大冒險
大米
(2)使用
from lxml import etree
tree = etree.parse("b.html") # parse()用來讀取文件
# 1.取a標(biāo)簽下的所有內(nèi)容
res1 = tree.xpath("/html/body/ul/li/a/text()")
# 2.取a標(biāo)簽下的第一個,xpath順序從1開始數(shù)
res2 = tree.xpath("/html/body/ul/li[1]/a/text()")
# 3.取a標(biāo)簽下href值為“dapao”的內(nèi)容。[@XX=XX]代表屬性的篩選
res3 = tree.xpath("/html/body/ol/li/a[@href='dapao']/text()")
# 4.遍歷li標(biāo)簽下的所有內(nèi)容
ol_li_list = tree.xpath("/html/body/ol/li")
for li in ol_li_list:
# 從每個li中提取到文字信息
res4_1 = li.xpath("./a/text()") # 此時的li不是根節(jié)點(diǎn)了,而是在li中繼續(xù)去存在。此時需要利用./
print(res4_1)
# 查找a標(biāo)簽里面的href的值。利用@屬性
res4_2 = li.xpath("./a/@href")
print(res4_2)
# 5.拿到ul/li/a標(biāo)簽下所有的href值
res5 = tree.xpath("/html/body/ul/li/a/@href")
3. 練習(xí):抓取豬八戒網(wǎng)信息在該網(wǎng)站中,爬取紅色框中的內(nèi)容。代碼如下,
#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
1.提取頁面源代碼
2.提取和解析數(shù)據(jù)
"""
import io
import sys
from lxml import etree
import requests
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='gb18030') # 改變標(biāo)準(zhǔn)輸出的默認(rèn)編碼
url = "https://wuhan.zbj.com/search/service/?kw=saas"
resp = requests.get(url)
# resp.encoding = 'gbk' # 指定字符集
# print(resp.text)
# 提取和解析數(shù)據(jù)
html = etree.HTML(resp.text) # HTML()用來加載網(wǎng)頁源碼
#拿到每一個服務(wù)商的div
fin_list = []
divs = html.xpath("http://*[@id='__layout']/div/div[2]/div/div[4]/div[4]/div[1]/div")
for div in divs: #獲取每一個服務(wù)商的信息
price = div.xpath("./div/div[2]/div[1]/span/text()")
list = []
if(len(price) != 0): #提取到的某條數(shù)據(jù)可能為空,要進(jìn)行判斷
price = price[0].strip("¥") # 去掉開頭的¥
list.append(price)
# name = div.xpath("./div/div[2]/div[2]/a/text()") #此時會出現(xiàn)列表中有兩個元素的情況,要將他們進(jìn)行拼接
name = "saas".join(div.xpath("./div/div[2]/div[2]/a/text()"))
if (len(name) != 0):
list.append(name)
place = div.xpath("./div/a/div[2]/div/div/text()")
if (len(place) != 0):
list.append(place[0])
#將提取到的所有數(shù)據(jù)以列表的形式存放
fin_list.append(list)
print(fin_list)
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
當(dāng)前名稱:生生生-爬蟲02-創(chuàng)新互聯(lián)
瀏覽路徑:http://www.chinadenli.net/article16/dcejdg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、App設(shè)計、虛擬主機(jī)、網(wǎng)站內(nèi)鏈、手機(jī)網(wǎng)站建設(shè)、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容