安装
pip install lxml
导入
from lxml import etree
xpath使用路径表达式提取html文档中的元素或元素集,然后元素通过沿路径path或步steps来选取数据
XPath常用语法格式
表达式 | 描述 |
---|---|
div | 选取div元素的所有子元素 |
/div | 选取根元素div |
ul//li | 选取ul元素下的所有li子元素 |
//@class | 选取所有具有class属性的元素 |
ul/li/[1] | 选取ul元素下的第一个li子元素 |
//div[@id=‘t2’] | 选取id属性为t2的所有div元素 |
//li[@class=‘box’] | 选取class属性为box的li子元素 |
/div/ui/li[@class=‘top’] | 选取根元素div下ul元素下的class属性为top的li子元素 |
//li/a/@href | 获取li元素下所有a元素的href值 |
//li/a/text() | 获取li元素下所有a元素的文本内容 |
使用xpath匹配数据实践
爬取彼岸图4k高清动漫壁纸 https://pic.netbian.com/4kdongman/
爬取第一页的图片
import requests
from lxml import etree
import osurl = 'https://pic.netbian.com/4kdongman/index.html'
r = requests.get(url)
r.encoding='gbk'
html = etree.HTML(r.text)# <Element html at 0x11647c63ec8>
img_urls = html.xpath("//div[@class='slist']/ul/li/a/@href")# ['/tupian/32274.html', '/tupian/32257.html', ...
for img_url in img_urls:# 第二层urlimg_url = 'https://pic.netbian.com' + img_urlrr = requests.get(url=img_url)rr.encoding='gbk'img_html = etree.HTML(rr.text)img_name = img_html.xpath("//a[@id='img']/img/@title")[0]# 高清图片的srcimg_src = 'https://pic.netbian.com' + img_html.xpath("//a[@id='img']/img/@src")[0]rimg = requests.get(url = img_src)# 可以改文件夹的名字folder_name = 'dongman'if not os.path.exists(folder_name):os.mkdir(folder_name)# 保存图片with open(f'{folder_name}/{img_name}.jpg','wb') as f:f.write(rimg.content)print(img_name)
批量爬取多页图片