xpath原理
xpath原理:
1.实例化一个etree对象,且需要将被解析的页面源代码加载到给对象中
2.调用etree对象中的xpath方法结合xpath表达式实现标签的定位和内容的捕获
环境安装
pip3 install lxml
实例化一个etree对象:from lxml import etree
1.将本地文档的源代码数据导入:
etree.parse(filePath)
2.导入互联网上获取的源码数据
etree.HTML('page_text')
xpath表达式
/:表示从根节点开始定位。表示的是一个层级
//:表示多个层级。表示从任意的位置开始定位
属性定位://div[@class='song'] tag[@attrName="attrValue"]
索引定位://div[@class='song']/p[3] 索引是从1开始的
取文本
/text() 获取的是标签中直系的文本内容
//text() 标签中非直系的文本内容(所有的文本内容)
取属性
@attrName ==>img/src
import requests
from lxml import etree
import os
if __name__ == "__main__":
if not os.path.exists('./picsLib'):
os.mkdir('./picsLib')
headers = {
'user-agent': 'Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 88.0.4324.150Safari / 537.36'
}
url = "http://pic.netbian.com/4kbeijing/"
response = requests.get(url = url,headers=headers)
response.encoding = response.apparent_encoding
page_text = response.text
tree = etree.HTML(page_text)
lis = tree.xpath('//div[@class="slist"]/ul/li')
for li in lis:
img_src = 'http://pic.netbian.com'+li.xpath('./a/img/@src')[0]
img_name = li.xpath('./a/img/@alt')[0]+'.jpg'
#img_name = img_name.encode('iso-8859-1').decode('gbk')
#print(img_name,img_src)
img_data = requests.get(url = img_src,headers=headers).content
img_path = 'picsLib/'+img_name
with open(img_path,'wb') as fp:
fp.write(img_data)
print(img_name+"已保存!")
fp.close()