ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

教你如何用python一键下载cosplay美女图片(附源码)

2021-11-26 18:05:36  阅读:149  来源: 互联网

标签:__ cosplay python 22% content url 源码 print response


 我也是好久没有整活了呀铁子们,最近看上了一个叫魅宝网的网站里面图片嗯~你懂的嘿嘿嘿

别问为什么后续得图片都打码了,不打码过不了审得啊哥哥 

魅宝网-美女写真图片,美女模特私房照片网 (abwzhuan.com)icon-default.png?t=LA92http://www.abwzhuan.com/首先咱们来分析目标网站,然后发现只要呼出调试窗口就会无限debugger 循环,这个不好分析网站呀,只要点击这个蓝色的箭头就会无限跳转到这里然后也不加载数据了

 这个处理方法嘛我们先试验第一种在debugger这一行左边数字哪里右击选择箭头所指的那个,意思就是永远不在这里断点,经过测试点击之后我们在点击蓝色的箭头就可以正常调试网站了,不会在出现

 第二种方法嘛,点击这个按钮之后会弹出一个输入框,在输入框里面输入false回车之后我们在点击蓝色的箭头也是可以正常调试网站的

 以上两种方法吧不能适用所有网站,如果遇到别的网站无法适用的话,我们就用Fiddler抓包然后重写文件在返回给浏览器,这个过几天我会单独出一篇文章来讲如何抓包重写

到这里就没有什么大问题了开始正常分析网站,可以看到图片详情页都是在

//div[@class="placeholder"]/a/@href 这个里面的

用xpath验证了一下没有问题哈 

那么这一页爬取完,我要爬取下一页怎么办?可以看到需要点击这个按钮,而且点击之后网址并无变化,这也是一个前后端交互的网站 

我们来分析一下 每次加载会多一个这样的文件 只有page/{}这里的数字有变化,这个很有可能就是翻页的文件,那么我们只需要构造尾部的数字即可实现翻页获取的效果

 我们来写好前面代码伪造一个headers 里面记得传入cookie 有些网站会识别身份信息,也要传入Referer这个是标记你从哪里来的,如果没有这些参数待会下载图片的时候可能会失败,我为了保险起见也加了Host,还有就是大家不要为了下载快而把那段随机暂停的代码去掉,毕竟如果爬取太快把别人网站爬崩了,那可是要去局子喝茶的哟~

import requests
import random  #随机模块
from lxml import etree
import time

UserAgents = ['这里面存储你们的请求头']
user_agent = random.choice(UserAgents)  # 使用随机请求头

headers = {'User-Agent': user_agent,
           'Cookie':'X_CACHE_KEY=292b6a4a0ebc1a4c227ee50e14c4cef0; __51vcke__JJF6u7Uarq5xM561=ec59775c-bbab-569e-b893-3d73dcc37223; __51vuft__JJF6u7Uarq5xM561=1637834687423; cao_notice_cookie=1; __51uvsct__JJF6u7Uarq5xM561=2; PHPSESSID=316mo0fl1u3h59e8f8m393kapv; __vtins__JJF6u7Uarq5xM561=%7B%22sid%22%3A%20%227db4ef0d-7bde-56d3-821a-7508134d21bc%22%2C%20%22vd%22%3A%2016%2C%20%22stt%22%3A%201180142%2C%20%22dr%22%3A%20229714%2C%20%22expires%22%3A%201637849029367%2C%20%22ct%22%3A%201637847229367%7D',
           'Referer':'http://www.abwzhuan.com/siwameinv',
           'Host':'www.abwzhuan.com'
           }
def page_url(url):
    response = requests.get(url, headers=headers)
    # print(response.text)
    # print('====='*40)
    # text = response.text
    content = response.content.decode('utf8')
    # 解析html字符串
    html = etree.HTML(content)
    detail_urls=html.xpath('//div[@class="placeholder"]/a/@href') #详情页的url
    for detail_url in detail_urls:
        # print(detail_url)
        jiexi(detail_url)  #这里我后续定义了一个jiexi函数  循环去解析返回的职位详情页  
        time.sleep(random.uniform(1, 3)) #随机暂停

if __name__ == '__main__':
    for x in range(1,16):    #这里面输入你们想爬取的页数,python里面是左包又不包也就是如果是1-16 ,实际上获取的是1-15页
        url='http://www.abwzhuan.com/cosplay/page/{}'.format(x)
        page_url(url)

 可以看到是在这个标签下面,那么我们来写一下解析详情页的函数吧

 不管是下载图片还是写入啥,都记得要使用try试着去运行,不然如果出现意外报错就得从头获取了,因为这个程序不是增量爬虫,增量爬虫得话就是哪怕你报错暂停了重新运行是不会在爬取之前获取过的,等有时间了我专门写一期增量爬虫得

count=0
def jiexi(url):
    response = requests.get(url, headers=headers)
    content = response.content.decode('utf8')
    # 解析html字符串
    html = etree.HTML(content)
    imgs=html.xpath('//p/img[@loading="lazy"]/@src')  #获取图片url
    # print(imgs)
    try:
        for img in imgs:
            image_content = requests.get(img).content  # 获取到之后去转码为二进制
            global count  # 这里要声明一下是全局变量不然有时候跑起来会报错说提前被赋值
            with open("这里写你创建的文件夹的位置/{}.jpg".format(count), "wb") as f:     
                f.write(image_content)
                count = count + 1
                print("成功下载第{}张图片!".format(count))
    except:
        print('这个图片有问题'+img)

果然啊!!在运行得时候有个图片出问题了

 最后也是获取了1099张图片呀

 全部源代码如下

import requests
import random  #随机模块
from lxml import etree
import time

UserAgents = ['这里面存储你们的请求头']
user_agent = random.choice(UserAgents)  # 使用随机请求头

headers = {'User-Agent': user_agent,
           'Cookie':'X_CACHE_KEY=292b6a4a0ebc1a4c227ee50e14c4cef0; __51vcke__JJF6u7Uarq5xM561=ec59775c-bbab-569e-b893-3d73dcc37223; __51vuft__JJF6u7Uarq5xM561=1637834687423; cao_notice_cookie=1; __51uvsct__JJF6u7Uarq5xM561=2; PHPSESSID=316mo0fl1u3h59e8f8m393kapv; __vtins__JJF6u7Uarq5xM561=%7B%22sid%22%3A%20%227db4ef0d-7bde-56d3-821a-7508134d21bc%22%2C%20%22vd%22%3A%2016%2C%20%22stt%22%3A%201180142%2C%20%22dr%22%3A%20229714%2C%20%22expires%22%3A%201637849029367%2C%20%22ct%22%3A%201637847229367%7D',
           'Referer':'http://www.abwzhuan.com/siwameinv',
           'Host':'www.abwzhuan.com'
           }
def page_url(url):
    response = requests.get(url, headers=headers)
    # print(response.text)
    # print('====='*40)
    # text = response.text
    content = response.content.decode('utf8')
    # 解析html字符串
    html = etree.HTML(content)
    detail_urls=html.xpath('//div[@class="placeholder"]/a/@href')
    for detail_url in detail_urls:
        # print(detail_url)
        jiexi(detail_url)  #循环去解析返回的职位详情页
        time.sleep(random.uniform(1, 3)) #随机暂停
count=0
def jiexi(url):
    response = requests.get(url, headers=headers)
    content = response.content.decode('utf8')
    # 解析html字符串
    html = etree.HTML(content)
    imgs=html.xpath('//p/img[@loading="lazy"]/@src')
    # print(imgs)
    try:
        for img in imgs:
            image_content = requests.get(img).content  # 获取到之后去请求
            global count  # 这里要声明一下是全局变量不然有时候跑起来会报错说提前被赋值
            with open("F:\写好的爬虫\各种用法\美图\cosplay/{}.jpg".format(count), "wb") as f:
                f.write(image_content)
                count = count + 1
                print("成功下载第{}张图片!".format(count))
    except:
        print('这个图片有问题'+img)

if __name__ == '__main__':
    for x in range(1,16):
        url='http://www.abwzhuan.com/cosplay/page/{}'.format(x)
        page_url(url)

对了还有一件事~看完觉得可以的话点个赞吧,切莫白嫖 

至此程序就全部写完啦 

声明

本文仅限于做技术交流学习,请勿用作任何非法用途!

 

标签:__,cosplay,python,22%,content,url,源码,print,response
来源: https://blog.csdn.net/m0_59874815/article/details/121563914

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有