使用xpath分页爬取站长素材中的图标

最近在跟着网上的视频复习爬虫,记录一下

xpath的使用

xpath解析原理:
	1、实例化一个etree对象,且需要将解析的页面源码数据加载到该对象中
	2、调用etree对象中的xpath方法结合xpath表达式实现标签的定位和内容获取
环境安装:
	pip install lxml
如何实例化一个etree对象:from lxml import etree
	1、将本地的html文件中的源码数据加载到etree对象中:
		etree.parse(filePath)
	2、可以将网络上获取到的源码数据加载到该对象中:
		etree.HTML(page_text)
xpath表达式:
	/ :表示的是从根节点开始定位,表示一个层级
	// : 表示的是多个层级,可以表示从任意位置开始
	属性定位: //div[@class="song"] ,即tag[@attrName="attrValue"]
	索引定位://div[2]/p[3]   **索引是从1开始的**
取文本:
	/text()   指获取的是标签中直系的文本内容
	//text()  指标签中非直系的文本内容(所有的文本内容)
取属性:
	/@attrName, 即img/@src或/a/@href等

作业案例

目标:爬取站长素材中图标,并保存
代码实现:

# 爬取站长素材中图标
import requests
from lxml import etree
import os
if __name__=="__main__":
    # 分页
    for i in range(1,10):
        # 第一页的网址和其他页的网址不一样
        if i ==1:
            url = "https://sc.chinaz.com/tubiao/index.html"
        else:
            url = "https://sc.chinaz.com/tubiao/index_"+str(i)+".html"
        headers = {
            "User-Agent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:93.0) Gecko/20100101 Firefox/93.0"
        }
        # 获取基础页面内容,content防止中文乱码
        page_text = requests.get(url,headers).content
        path = "./icon/"+str(i)
        if not os.path.exists(path):
            os.makedirs(path)
        # 对基础页面进行解析
        tree = etree.HTML(page_text)
        for icon in tree.xpath('//ul[@class="pngblock imgload"]/li/p'):
            # 获取icon详情页面的url和标题
            icon_url = "https:"+icon.xpath('./a/@href')[0]
            icon_name = icon.xpath('./a/@alt')[0]
            print(icon_name)
            # 详情页面解析
            detail_page_text = requests.get(icon_url,headers).content
            detail_tree = etree.HTML(detail_page_text)
            for download in detail_tree.xpath('//div[@class="downbody"]/div[3]/a[1]'):
                # 获取icon详情页面中下载的url
                download_url = download.xpath('./@href')[0]
                download_text = requests.get(download_url,headers).content
                # 对rar文件进行保存
                # rar文件的保存不知怎么做,就参照的图像的保存来到,竟然成功了
                with open(path + '/' + icon_name, 'wb') as f:
                    f.write(download_text)
                    print(icon_name, "ok!")

结果展示

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值