python爬虫练习--爬取站长素材中免费简历模板

python爬虫练习--爬取站长素材中免费简历模板

  • 一、需求
  • 二、代码
    • 1. 引入库
    • 2. main()
    • 3. saveData(div_list)
    • 4. 收尾
  • 结语


一、需求

此代码是为完成波波老师python爬虫视频作业所做
对应视频: 波波老师B站视频[P28] 对应up为:路飞学城IT

基本要求:
爬取站长素材中免费简历模板

进阶要求:
1.能够翻页爬取
2.能够根据网页上的内容自动命名文件
3.能够处理中文命名乱码问题
4.将文件统一保存在一个新创建的文件夹内


二、代码

1. 引入库

# -*- codeing = utf-8 -*-
# @Time: 2021/1/4 4:06
# @Author: Si
# @File: test_xpath作业_爬取站长素材中免费简历模板.py
# @Software: PyCharm


import requests
from lxml import etree
import os
import time
from requests.adapters import HTTPAdapter   #有关超时重置的模块

2. main()

此处指定url,并通过for循环,使自动变更的url可以完成翻页功能,完成第一轮页面访问和xpath解析。

def main():
    if not os.path.exists('./jianlimuban'):         #如果没有此文件夹,则创建一个
        os.mkdir('./jianlimuban')

    headers = {
        "User-Agent": "Mozilla / 5.0(Windows NT 10.0; Win64;x64;rv: 84.0) Gecko / 20100101 Firefox / 84.0"
    }
    url = 'https://sc.chinaz.com/jianli/free_%d.html'

    for i in range(1,10):										#意思一下,只爬到第9页
        url = 'https://sc.chinaz.com/jianli/free_%d.html'%i     #翻页功能
        print(url)
        if i == 1:
            url = 'https://sc.chinaz.com/jianli/free.html'      #第一页网址比较特殊
            print(url)
        page_text = requests.get(url=url, headers=headers).text

        tree = etree.HTML(page_text)
        div_list = tree.xpath('//div[@id="main"]/div/div')

        saveData(div_list)

3. saveData(div_list)

实现访问模板概览页面,并进入下载页面,然后再存储的功能, 此部分功能比较长,所以单独拉出来做一个模块。

访问页面,xpath解析,识别出模板名称,确定存储路径。

def saveData(div_list):
    headers = {
        "User-Agent": "Mozilla / 5.0(Windows NT 10.0; Win64;x64;rv: 84.0) Gecko / 20100101 Firefox / 84.0"
    }
    for div in div_list:
        url_href = div.xpath('./a/@href')[0]
        url_href = 'https:' + url_href
        # 访问页面
        page_text_xiazai = requests.get(url=url_href, headers=headers).text

        # xpath解析
        tree_xiazai = etree.HTML(page_text_xiazai)
        url_li = tree_xiazai.xpath('//div[@id="down"]/div/ul/li[11]/a/@href')[0]    # xpath得到的是列表,别忘了后面加[0]

        # 确定文件名称
        jianli_name = tree_xiazai.xpath('//div[@class="bgwhite"]/div/h1/text()')[0] + '.rar'  # 格式是一起写在文件名里的
        jianli_name = jianli_name.encode('iso-8859-1').decode('utf-8')  # 这里decode用utf-8,是因为网站源代码的charset值是utf-8,也就是编码方法,自然对应decode解码
        # 确定存储路径
        jianli_path = './jianlimuban/' + jianli_name  # 别忘了这里的文件夹名后加斜杠'/'

超时重置的设置。自我拓展新知识点。

 # 超时重置的设置
        s = requests.Session()
        s.mount('http://', HTTPAdapter(max_retries=5))      #这里是最大重试次数,重试5次,加最初一次,一共6次
        s.mount('https://', HTTPAdapter(max_retries=5))     #两种访问,都要分别设置

获取文件数据,持久化存储文件。

# 获取文件数据
        jianli_data = s.get(url=url_li, headers=headers,timeout=10).content  # timeout这个是超时的时间限制
        # 存储文件
        with open(jianli_path, 'wb') as fp:
            fp.write(jianli_data)
            print(jianli_name, '下载成功')

        fp.close()
        time.sleep(1)       #睡眠1秒钟后继续,针对反爬的演练

4. 收尾

if __name__ == '__main__':
    main()
    print('over')

结语

如果对代码有疑问或其他问题,欢迎评论告诉我,我会常来看 (毕竟面向CSDN编程) 。我也是一个刚刚学习python的新手,希望在疫情期间迎头赶上,欢迎大家一起讨论,共同进步。

你可能感兴趣的:(#python爬虫作业,python,乱码,xpath,爬虫)