python爬虫练习(xpath爬取站长素材中的免费简历模板)

思路分析

首先,对站长素材网站中的免费网站页面发起get请求,以防万一,可将响应数据编码格式手动设置为utf-8。然后,实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中。再使用xpath表达式进行标签定位。再从定位的标签中提取到ppt详情页的访问地址和名称。

再对ppt详情页的地址发起get请求,再次实例化一个etree的对象,且将需要被解析的页面源码数据加载到该对象中,定位下载地址的标签并提取下载地址。

再对下载地址发起get请求。最后将响应数据进行持久化存储。

总结起来就是,三次请求,两次解析。

源码 

import requests
from lxml import etree
import os

if __name__ == "__main__":
    # 创建一个文件夹,保存ppt
    if not os.path.exists('./ppt模板'):
        os.mkdir('./ppt模板')
    # UA伪装
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) \
                            AppleWebKit/537.36 (KHTML, like Gecko) \
                                Chrome/96.0.4664.93 Safari/537.36'
    }
    url = 'https://aspx.sc.chinaz.com/query.aspx?keyword=%E5%85%8D%E8%B4%B9&issale=&classID=864&page=1'
    # 发起请求
    page_response = requests.get(url=url, headers=headers)
    # 手动设置响应数据编码格式为utf-8
    page_response.encoding = 'utf-8'
    # 获取响应数据。text方法返回的是字符串形式的响应数据
    page_text = page_response.text
    # 数据解析
    tree = etree.HTML(page_text)
    div_list = tree.xpath('//div[@id="main"]/div/div')
    for div in div_list:
        ppt_title = div.xpath('./p/a/text()')[0] + '.rar'
        # ppt_title = ppt_title.encode('iso-8859-1').decode('gbk')
        ppt_src = 'https:' + div.xpath('./p/a/@href')[0]
        print(ppt_src)
        # 向PPT详情页发起请求
        ppt_response = requests.get(url=ppt_src, headers=headers)
        ppt_response.encoding = 'utf-8'
        ppt_page_text = ppt_response.text
        ppt_tree = etree.HTML(ppt_page_text)
        # 解析下载地址
        ppt_download_url = ppt_tree.xpath('//ul[@class="clearfix"]/li[1]/a/@href')[0]
        print(ppt_download_url)
        # 访问下载地址
        ppt_data = requests.get(url=ppt_download_url, headers=headers).content
        # 设置存储路径
        ppt_path = './ppt模板/' + ppt_title
        with open(ppt_path, 'wb') as fp:
            fp.write(ppt_data)
            print(ppt_title, "下载完成!")
    # print("第%d页下载完毕!" % 1)

 结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值