一、環(huán)境配置
1、安裝xpath
下載地址:百度網(wǎng)盤 請輸入提取碼
第一步:
下載好文件后會得到一個沒有擴展名的文件,重命名該文件將其改為.rar或者.zip等壓縮文件,解壓之后會得到一個.crx文件和一個.pem文件。新建一個文件夾,將這兩個文件放在該文件夾(本人將其命名為xpath-helper)內(nèi)。
第二步:
將.crx文件重命名,改為.rar或.zip文件,解壓在xpath-helper文件夾中,解壓后會得到許多文件如下圖
第三步:
打開Chrome瀏覽器,進入擴展程序頁面,選擇右上角的開發(fā)者模式
,之后點擊左上角的加載已解壓的擴展程序
,選擇xpath-helper
文件夾,這樣在瀏覽器中就會出現(xiàn)XPath-Helper
了。
?2、安裝lxml的庫
想要使用xpath,我們還必須安裝一個名為lxml的庫,這個庫安裝的目錄必須在python的解釋器路徑下。
首先,我們查看python解釋器的路徑。打開pycharm --> file -->settings -->Project?
點擊加號直接搜索安裝或者命令行安裝:
pip install lxml
二、xpath基本語法
1、基礎(chǔ)語法
1. 路徑查詢
? ? ? ? //:查找所有子孫節(jié)點,不考慮層級關(guān)系
? ? ? ? / :找直接子節(jié)點
2. 謂詞查詢
? ? ? ? //div[@id]
? ? ? ? //div[@id="maincontent"]
3. 屬性查詢
? ? ? ? //@class
4. 模糊查詢
? ? ? ? //div[contains(@id, "he")]
? ? ? ? //div[starts‐with(@id, "he")]
5. 內(nèi)容查詢
? ? ? ? //div/h1/text()
6. 邏輯運算
? ? ? ? //div[@id="head" and @class="s_down"]
? ? ? ? //title | //price
新建一個HTML文章來源:http://www.zghlxwxcb.cn/news/detail-689753.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<title>Title</title>
</head>
<body>
<ul>
<li id="l1" class="c1">北京</li>
<li id="l2">上海</li>
<li id="c3">深圳</li>
<li id="c4">武漢</li>
</ul>
</body>
</html>
編寫python文件文章來源地址http://www.zghlxwxcb.cn/news/detail-689753.html
from lxml import etree
# lxml解析本地文件 etree.parse('XX.html')
# lxml解析服務(wù)器響應(yīng)文件 etree.HTML(response.read().decode('utf‐8')
tree = etree.parse('1.html')
# tree.xpath(xpath路徑)
# 查找ul下面的li
li_list = tree.xpath('//body/ul/li')
# 查找所有有id屬性的li標簽
# text() 獲取標簽中的內(nèi)容
li_list = tree.xpath('//ul/li[@id]/text()')
# 找到id為l1的li標簽 注意引號的問題
li_list = tree.xpath('//ul/li[@id="l1"]/text()')
# 查找到id位l1的li標簽的class的屬性值
li = tree.xpath('//ul/li[@id="l1"]/@class')
# 查詢id中包含l的li標簽
li_list = tree.xpath('//ul/li[contains(@id,"l")]/text()')
# 查詢id的值以c開頭的li標簽
li_list = tree.xpath('//ul/li[starts-with(@id,"c")]/text()')
# 查詢id為l1和class為c1的li標簽
li_list = tree.xpath('//ul/li[@id="l1" and @class="c1"]/text()')
#查詢id為l1或id為l2的li標簽
li_list = tree.xpath('//ul/li[@id="l1"]/text() | //ul/li[@id="l2"]/text()')
# 判斷列表的長度
print(li_list)
print(len(li_list))
2、案例:爬取站長素材網(wǎng)上的前十頁照片
# (1) 請求對象的定制
# (2)獲取網(wǎng)頁的源碼
# (3)下載
# 需求 下載的前十頁的圖片
# https://sc.chinaz.com/tupian/qinglvtupian.html 1
# https://sc.chinaz.com/tupian/qinglvtupian_page.html
import urllib.request
from lxml import etree
def create_request(page):
if(page == 1):
url = 'https://sc.chinaz.com/tupian/qinglvtupian.html'
else:
url = 'https://sc.chinaz.com/tupian/qinglvtupian_' + str(page) + '.html'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',
}
request = urllib.request.Request(url = url, headers = headers)
return request
def get_content(request):
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
return content
def down_load(content):
# 下載圖片
# urllib.request.urlretrieve('圖片地址','文件的名字')
tree = etree.HTML(content)
name_list = tree.xpath('//div[@class="item"]//img/@alt')
# 一般設(shè)計圖片的網(wǎng)站都會進行懶加載
src_list = tree.xpath('//div[@class="item"]//img/@data-original')
print(src_list)
for i in range(len(name_list)):
name = name_list[i]
src = src_list[i]
url = 'https:' + src
urllib.request.urlretrieve(url=url,filename='./loveImg/' + name + '.jpg')
if __name__ == '__main__':
start_page = 1
end_page = 10
for page in range(start_page,end_page+1):
# (1) 請求對象的定制
request = create_request(page)
# (2)獲取網(wǎng)頁的源碼
content = get_content(request)
print(content)
with open('爬蟲_解析_站長素材.html','w',encoding='utf-8')as fp:
fp.write(content)
# (3)下載
down_load(content)
到了這里,關(guān)于python爬蟲數(shù)據(jù)解析xpath的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!