前言
嗨喽,大家好呀~这里是爱看美女的茜茜呐

开发环境:
-  
Python 3.8 / 编译器
 -  
Pycharm 2021.2版本 / 编辑器
 
模块使用:
-  
requests : 主要用来发 送 HTTP 请求 、 属于第三方模块
 -  
parsel : 解析html,xml内容,获取需要的数据 、属于第三方模块
 -  
re :python独有的匹配字符串的模块 、内置模块,无需安装
 -  
json :该模块就可以完成 JSON 与 Python 两种数据格式的相互转换 、内置模块,无需安装
 
第三方模块安装:
在cmd里面或者pycharm终端里面进行安装 pip install requests 安装。
本次目标

本次案例的思路流程:
一. 关于数据来源查询:
找不到数据来源,不知道去采集 ?
采集 P站数据内容 主要是图片壁纸
-  
找单张图片url地址
 -  
找这个图片url地址来源
来自于图片详情页url:
 -  
找多张图片url地址参数变化
在图片列表页可以获取每个图片详情页url地址
 
二. 代码实现思路:
-  
发送请求:
 -  
获取数据
 -  
解析数据
 -  
保存数据
 
代码展示:
导入模块
import requests 
import parsel
import re
import json
import pprint 
 
def change_title(title):
    mode = re.compile(r'[\\\/\:\*\?\"\<\>\|]')
    new_title = re.sub(mode, '_', title)
    return new_title
 
多页采集
for page in range(1, 11):
    print(f'======================正在爬取第{page}页数据内容======================')
 
    url = f'*****/hot_{page}'
 
发送请求
需要加上headers 请求头
请求头: 把Python代码伪装成浏览器向服务器发送请求
user-agent:浏览器的信息
    headers = {
        'user-agent': ' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36'
    }
 
模拟浏览器对服务器发送请求, 然后服务器就给我们返回一个响应数据 response
    response = requests.get(url=url, headers=headers)
 
    # response.text 获取网页的文本数据
    # print(response.text)
 
解析数据
css选择 xpath re正则表达式 bs4 parsel
首先需要把 response.text 这个网页字符串 转换成 selector 对象
    selector = parsel.selector(response.text)
 
css选择器 就是根据标签属性内容提取相关数据
标签里面的class类 开头用一个圆点 . 可以代替
attr() 属性选择器 选择标签里面什么属性内容 text 取标签的文本数据
getall() 取所有标签内容 返回的是一个列表
    href = selector.css('.px-img a::attr(href)').getall()
    titles = selector.css('.px-info .px-info-title::text').getall()
 
我要提取一个列表每一个元素 是通过遍历
zip() 一个合并函数 可以把两个列表合并到一起 返回的一个zip对象
通过遍历zip对象 给我们返回的一个元组
    zip_data = zip(href, titles)
    # print(zip_data)
    for index in zip_data:
        index_url = '****' + index[0]
        title = index[1]
        response_1 = requests.get(url=index_url, headers=headers)
        # print(index_url)
        # print(response_1.text)
        # re.findall('写匹配规则', '在哪里匹配')
        # \ 转义字符 主要把哪些特殊字符 转义成除了自己本身字符意思 不含有其他任何特殊意思
        # 正则表达式 匹配出来的内容 是列表
        html_data = re.findall('window\.__INITIAL_STATE__=(.*?)', response_1.text)
        json_data = json.loads(html_data)
 
json字典取值 键值对取值, 根据冒号左边的关键字 提取冒号右边的值
        img_data = json_data['tag']['worksDetailData']['coverImage']['path']
        img_url = '*****' + img_data + '?imageView2/3/q/85/interlace/1/w/2560/h/2560/format/webp'
 
split() 字符串分割 以 ‘.’ 分割成一个列表
        img_name = img_data.split('.')[-1]
 
保存数据
        # print(img_url)
        # print(title)
        # print(type(json_data))
        # break # 跳出循环 只打印一个就好了
        # response.content 获取网页二进制数据 图片/视频/音频/特殊格式的文件 这些都是需要获取二进制数据
        new_title = change_title(title)
        img_content = requests.get(url=img_url, headers=headers)
        with open('img\\' + new_title + '.' + img_name, mode='wb') as f:
            f.write(img_content)
            print(title)
 

 
 
 

 
 
尾语
大家觉得有用的话可以来个免费的点赞+收藏+关注,
防止下次我悄悄更新了好东西你却不知道 !!!
感谢你观看我的文章呐~本次航班到这里就结束啦 🛬
希望本篇文章有对你带来帮助 🎉,有学习到一点知识~
躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。



















