爬取4K Picture

深夜爬取4k图片

在这里插入图片描述

  • 下载流程
  1. 定义page_text函数,对第一页地址发送get请求,因为页面数据在页面源代码都能查到,所以发送get 请求就ok!,注意要进行编码格式设置,可以去源代码查看,
  2. 定义parse_data函数,利用xpath解析图片所对应的url,以及其名字,把解析到的数据都添加到列表中
  3. 定义downloadPic函数,先利用os模块,如果有这个目录就不创建,没有就创建,用for循环对刚才添加到列表中的数据(数据在datas中)进行遍历,取得名字,和地址,再对地址发起请求,这个是要下载图片,图片保存方式为二进制格式,所以这个的请求用content,最后用上下文管理器进行保存到目录中,注意:用了with 上下文管理器,最后我们就不必对文件进行关闭
  4. 主函数主要是传递一个url 参数page_text进行分页的操作
import requests, os
from lxml import etree

# UA伪装
headers = {
    'UserAgent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
}


# 发送请求,获取网页源代码
def page_text(url):
    response = requests.get(url=url, headers=headers)
    response.encoding = "gbk"
    page_data = response.text
    parse_data(page_data)


# 解析数据
def parse_data(page_data):
    tree = etree.HTML(page_data)
    list_data_li = tree.xpath('//div[@class="slist"]/ul/li')
    # print(list_data)

    # 用来存放解析到的图片地址
    datas = []
    # 进行遍历列表
    for li in list_data_li:
        # 拼接完整的图片地址
        li_picture = 'https://pic.netbian.com' + li.xpath('./a/img/@src')[0]
        #解析图片名字
        pic_name = li.xpath('./a/b/text()')[0]

        dic = {
            'title': pic_name,
            'url': li_picture
        }
        datas.append(dic)

    return downloadPic(datas)


# 下载图片,持久化存储
def downloadPic(datas):
    if not os.path.exists('./IMG'):
        os.mkdir('IMG')
    for i in datas:
        # 图片名字
        title = i['title']
        # 图片地址
        url = i['url']
        # print(url,title)
        response = requests.get(url=url, headers=headers)
        response.encoding = "gbk"
        # 由于是图片所以响应的应该是二进制格式
        page_content = response.content
        # 持久化存储
        with open('IMG/' + title + '.jpg', 'wb') as fp:

            print(f'正在下载:{title}.jpg')
            fp.write(page_content)
    print('下载完毕!')


if __name__ == "__main__":
    # 先搞定第一页的数据
    print('------------------正在准备下载第 1 页----------------"')
    page_text('https://pic.netbian.com/4kdongman/')
    # 实现分页操作,下载多页数据

    ensure =input('第一张页面已经下载完了,是否继续下载呢\n'
                    '继续请输入y,取消请输入n:')
    if ensure == 'y' or 'Y':
        page_num =int(input('您想要下载到第几页数呢:'))
        for i in range(2, page_num + 1):
            print("------------------正在准备下载第 %d 页----------------"%i)
            page_text('https://pic.netbian.com/4kdongman/index_{}.html'.format(i))
    else:
        print('您的服务到此结束')
        exit()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

过期的秋刀鱼-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值