吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 9536|回复: 168
上一主题 下一主题
收起左侧

[Python] 爬取漂亮小姐姐(有点反爬机制)

    [复制链接]
跳转到指定楼层
楼主
yjn866y 发表于 2022-4-19 22:23 回帖奖励
第一次发自己的爬虫。。。有违请删

[Python] 纯文本查看 复制代码
import os
import requests
from lxml import etree
import re
import json
import time

headers = {
    'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.59',
    
}
#保存文件
def xzwj(xz,head,path):
    w_na = xz.split("/")[-1]    #拆分地址,以最后一段为存盘的文件名
#     print(w_na)
    w_rar = requests.get(xz,headers=head).content
    with open(path+f'//{w_na}','wb') as f:   #修改e://debug//  处,改变文件存放位置。文件目录必须提前建好。
        f.write(w_rar)
        print("正在下载,请耐心等待。。。")
        print(w_na,"下载完成")

#解释压缩文件网址
def rar_xz(rar_url,head):
    xz_res = requests.get(rar_url,headers=head).text
    xz_rar = re.compile(r'window.location=\'(.*?)\'')
    xz = xz_rar.findall(xz_res)[0]
#     print(xz_res)
#     print(xz)
    return xz

def xzxz(xx):   #文件下载
    print("要下载的内容和网址是:",pna[xx-1],pli[xx-1])
    print("---------开始下载展示图片------------")
    r_resp = requests.get(pli[xx-1],headers=headers)
    r_tree = etree.HTML(r_resp.text)
    r_imgs = r_tree.xpath('//div/div/p/img/@src')   #获取每张图片的网址
    r_nas = r_tree.xpath('//div/div/p/img/@title')  #获取下载的图片的文件名
    rar_url = r_tree.xpath('//div/div[@class="pay-box"]/a/@href')[0]  #获取下载文件的网址
    # print(rar_url)
    # print(len(r_nas),len(r_imgs))
    # print(r_nas,r_imgs)
    n=1
    path = f"e://debug//{r_nas[0]}"
    if not os.path.exists(path):
        os.mkdir(path)
    head ={
        'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.59',
        'referer':pli[xx-1]
    }
    for img in r_imgs:
    #     print(img)
        xzwj(img,head,path)
        print(f"{r_nas[0][:-2]},第{n}张下载完成---")
        n += 1
    print("共",len(r_imgs),"张下载完成")
    print("==============开始下载压缩文件============")
    xz = rar_xz(rar_url,head)
    xzwj(xz,head,path)

def main_xz():    
    print("1.性感美女 2.清纯可爱 3.性感御姐 4.制服诱惑")
    ms = input("请选择分类:")
    url1 = "https://dimgw.us/xinggan"
    url2 = "https://dimgw.us/qc"
    url3 = "https://dimgw.us/yj"
    url4 = "https://dimgw.us/zf"
    if int(ms) == 1:
        url = url1
    elif int(ms) == 2:
        url = url2
    elif int(ms) == 3:
        url = url3
    elif int(ms) == 4:
        url = url4
    # print(url)
    resp = requests.get(url,headers=headers)
    pages = re.findall(r'<a class="page-numbers" href="(.*?)</a>',resp.text)[-1]
    #print(resp.status_code)
    page = pages.split(">")[-1]
    print("此类共",page,"页!")
    print("*"*50)
    pna = []
    pli = []
    for p in range(1,int(page)+1):
        purl = url + f"/page/{p}"
        presp = requests.get(purl,headers=headers)
        tree = etree.HTML(presp.text)
        rw_li = tree.xpath('//div[@class="row posts-wrapper"]//div/a[@target="_blank"]/@href')
        rw_na = tree.xpath('//div[@class="row posts-wrapper"]//div/a[@target="_blank"]/img/@alt')
        # print(rw_na)2

        pna.extend(rw_na)
        pli.extend(rw_li)
    print("-"*50,"\n","共有以下美女可选:")
    for na in pna:
        print(pna.index(na)+1,na)
    return pna,pli

pna,pli = main_xz()
var = 1
while var != len(pna):
    xx = int(input("请输入要下载的序号(0退出):"))
    if xx != 0:
        xzxz(xx)
    else:
        print("退出")
        break
    var +=1

免费评分

参与人数 37吾爱币 +33 热心值 +28 收起 理由
minblack3 + 1 + 1 热心回复!
wjl + 1 已经失效,92行提示出错
佛本是菜 + 1 + 1 图太顶,已经无心学习
唐伯狮 + 1 + 1 谢谢@Thanks!
weiguoshun + 1 + 1 我很赞同!
zhang53000 + 1 + 1 用心讨论,共获提升!
cflollolcf + 1 + 1 我很赞同!
Reer + 1 + 1 热心回复!
wasj1314 + 1 谢谢@Thanks!
Bao694949923 + 1 + 1 我很赞同!
weihuainan123 + 1 + 1 我很赞同!
yoglove + 1 我很赞同!
云之从 + 1 + 1 用心讨论,共获提升!
KONKAv983 + 1 + 1 用心讨论,共获提升!
zmllxh + 1 + 1 谢谢@Thanks!
悼文吟诵 + 1 热心回复!
JDRTT + 1 + 1 我很赞同!
zhangyu121 + 1 谢谢@Thanks!
ytw6176 + 1 来学习
sanyv + 1 谢谢@Thanks!
shalj + 1 + 1 热心回复!
Joe_fly + 1 感谢楼主提供的网址
huangzhongjie + 1 谢谢@Thanks!
Arsenalczc + 1 + 1 求成品!!!
Mike_A + 1 热心回复!
a6136581 + 1 + 1 我很赞同!
3675291 + 1 + 1 我很赞同!
dgy + 1 谢谢@Thanks!
LASERHUANG + 1 + 1 用心讨论,共获提升!
AItechnology + 1 + 1 热心回复!
shawnyang2019 + 1 + 1 我很赞同!
panghan + 1 谢谢@Thanks!
zkdashiqibo + 1 + 1 用心讨论,共获提升!
zhangzsf + 1 + 1 谢谢@Thanks!
Lingjohnny + 1 我很赞同!
lanlano + 1 + 1 支持老大。。求老大弄个成品软件
chinawolf2000 + 1 + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
imhuihui 发表于 2022-4-26 18:36
本帖最后由 imhuihui 于 2022-5-30 17:27 编辑

https://wwd.lanzoum.com/b01vehgdi
密码:czxo
我打包好的exe可执行程序,需要的可自取【已更新】
在楼主贴的代码上 做了一点小修改,用的pyinstaller打包的
图片下载都存在电脑D盘,下载的时候会自动创建名为 美女写真文件夹,图片都下载到里面了
楼主原来的代码下载下来是webp格式的图片,电脑不能直接打开,所以我改了一下代码,把图片转成 jpg格式的了
求支持 求评分!

免费评分

参与人数 1热心值 +1 收起 理由
laobj + 1 谢谢@Thanks!

查看全部评分

推荐
小姐姐的男朋友 发表于 2022-4-20 13:39
lanlano 发表于 2022-4-20 00:03
光是代码不会用啊。。老大。。弄个成品软件啊老大。。

第一种方法(自己运行):安装Anaconda(集成Python运行环境及相关库)和PyCharm(Python编译软件)这两个软件,百度有相关教程;之后创建Python文件复制楼主的代码进去,即可运行。

第二种方法:你可以叫楼主把上述代码打包为exe文件;直接点击exe运行。

ps:https://dimgw.us    ←这是楼主给的福利网址

免费评分

参与人数 5吾爱币 +5 热心值 +4 收起 理由
默默看着你 + 1 我很赞同!
妖孽成佛 + 1 + 1 用心讨论,共获提升!
Jevon1992 + 1 + 1 我很赞同!
ytytyyt + 1 + 1 谢谢大佬,你的福利老纳很是感动
lanlano + 1 + 1 谢谢老大。感谢热心回复。

查看全部评分

推荐
lanlano 发表于 2022-4-20 00:03
光是代码不会用啊。。老大。。弄个成品软件啊老大。。
推荐
小姐姐的男朋友 发表于 2022-4-21 13:00
本帖最后由 小姐姐的男朋友 于 2022-4-21 13:10 编辑
songlangwei 发表于 2022-4-21 10:47
安装Anaconda(集成Python运行环境及相关库)和PyCharm(Python编译软件)这两个软件,百度有相关教程; ...

①打开pycharm,然后打开Terminal(Alt+F12),输入:pip install pyinstaller

②安装好pyinstaller库之后,然后在其中输入:pyinstaller -F *.py     
        *.py为你要打包的.py后缀文件,如:爬取小姐姐.py ;最后生成的exe文件即在dist文件内





PS:这是我打包好的压缩文件,需要自取→:「小姐姐.exe(要解压两次)」https://www.aliyundrive.com/s/DvwhdqPZrjq   提取码: 6f6w
点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。
推荐
 楼主| yjn866y 发表于 2022-6-5 10:16 |楼主
yysyWang 发表于 2022-6-4 16:47
一个美女一个文件夹,还是统一一个文件夹?

一人一个屋。。。。。
推荐
imhuihui 发表于 2022-5-27 20:26
本帖最后由 imhuihui 于 2022-5-27 20:37 编辑

可以的话给个评分呗 更新后的代码如下:
[Python] 纯文本查看 复制代码
import os
import requests
from lxml import etree
import re
from io import BytesIO
from PIL import Image

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.59'
}
# 保存文件
def xzwj(xz, head, path):
    w_na = xz.split("/")[-1].rsplit(".", 1)[0] + '.jpg'  # 拆分地址,以最后一段为存盘的文件名
    w_rar = requests.get(xz, headers=head)
    byte_stream = BytesIO(w_rar.content)
    im = Image.open(byte_stream)
    if im.mode == "RGBA":
        im.load()  # required for png.split()
        background = Image.new("RGB", im.size, (255, 255, 255))
        background.paste(im, mask=im.split()[3])

    im.save(path + f'/{w_na}', 'JPEG')
    print("正在下载,请耐心等待。。。")

def xzwj2(xz, head, path):
    w_na = xz.split("/")[-1]  # 拆分地址,以最后一段为存盘的文件名
    w_rar = requests.get(xz, headers=head).content
    with open(path + f'//{w_na}', 'wb') as f:  # 修改e://debug//  处,改变文件存放位置。文件目录必须提前建好。
        f.write(w_rar)
        print("正在下载,请耐心等待。。。")
        print(w_na, "下载完成")

# 解释压缩文件网址
def rar_xz(rar_url, head):
    xz_res = requests.get(rar_url, headers=head).text
    xz_rar = re.compile(r"window.location='(.*?)'")
    xz = xz_rar.findall(xz_res)[0]
    return xz

def xzxz(xx):  # 文件下载
    print("要下载的内容和网址是:", pna[xx - 1], pli[xx - 1])
    print("开始下载展示图片".center(30, '-'))
    r_resp = requests.get(pli[xx - 1], headers=headers)
    r_tree = etree.HTML(r_resp.text)
    # 使用xpth选择元素
    r_imgs = r_tree.xpath('//div/div/p/img/@src')  # 获取每张图片的网址
    r_nas = r_tree.xpath('//div/div/p/img/@title')  # 获取下载的图片的文件名
    rar_url = r_tree.xpath('//div/div[@class="pay-box"]/a/@href')[0]  # 获取下载文件的网址
    n = 1

    path = f"d://美女写真//{r_nas[0]}"
    if not os.path.exists(path):
        os.makedirs(path)
    head = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.59',
        'referer': pli[xx - 1]
    }
    for img in r_imgs:
        xzwj(img, head, path)
        print(f"{r_nas[0][:-2]},第{n}张下载完成---")
        n += 1
    print("共", len(r_imgs), "张下载完成")
    print("============开始下载压缩文件(文件很大)==========")
    xz = rar_xz(rar_url, head)
    xzwj2(xz, head, path)

def main_xz():
    print("1.性感美女 2.清纯可爱 3.性感御姐 4.制服诱惑")
    ms = input("请选择分类:")
    url1 = "https://dimgw.us/xinggan"
    url2 = "https://dimgw.us/qc"
    url3 = "https://dimgw.us/yj"
    url4 = "https://dimgw.us/zf"
    if int(ms) == 1:
        url = url1
    elif int(ms) == 2:
        url = url2
    elif int(ms) == 3:
        url = url3
    elif int(ms) == 4:
        url = url4
    # print(url)
    resp = requests.get(url, headers=headers)
    t = re.findall('<h2 class="entry-title">(.*?)</a></h2>', resp.text, re.S)
    a = 0
    pna = []
    pli = []
    print("此类共", len(t), "页!")
    print("*" * 50 + '\n')
    for i in t:
        # print(i)
        t1 = re.findall('>(.*)', i, re.S)
        t2 = re.findall('href=\"(.*?)\"', i, re.S)
        a += 1
        # 把t1,t2列表中的每个元素分别添加到列表pna,pli
        pna.extend(t1)
        pli.extend(t2)
        # print(t2[0])
        print(str(a) + ')', t1[0])
    return pna, pli

pna, pli = main_xz()
var = 1
while var != len(pna):
    xx = input("请输入要下载的序号(0退出):")
    if xx == '':
        continue
    elif int(xx) != 0:
        xzxz(int(xx))
    else:
        print("已退出!")
        break
    var += 1


免费评分

参与人数 2吾爱币 +1 热心值 +2 收起 理由
yyyg8 + 1 + 1 用心讨论,共获提升!
wjl + 1 热心回复!

查看全部评分

推荐
lickyzh 发表于 2022-5-4 21:37
谢谢楼主,肾已亏,不说了,先去买点六味地黄丸了
推荐
 楼主| yjn866y 发表于 2022-4-21 00:13 |楼主
Asy_少洋 发表于 2022-4-20 20:06
www.mly6.com  这个站,很多免费的 ,可以爬吗

找到要下的小姐姐的页面,复制网址,,填入就行。
不要下太多噢,注意身体
[Python] 纯文本查看 复制代码
# -*- coding:utf-8 -*-
import os,sys
import requests
from lxml import etree
import re
import json
import time

headers = {
    'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.59',
    
}
# url = "https://www.mly6.com/19157.html"
url = input("请输入要下载的网址(0退出):")
while url == str(0):
    break
else:
    header = {
        "Referer": url,
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
    }
    resp = requests.get(url,headers=headers)
    tree = etree.HTML(resp.text)
    u_img = tree.xpath('//div/article/p/a/@href')
    u_na = tree.xpath('//div//h1/@title')[0].split(r'[')[0]
    u_na =  "".join(u_na.split())
    # print(u_na)
    # print(u_img)
    path = f'e://deubug//{u_na}'
    if not os.path.exists(path):
        os.makedirs(path)
        print(u_na,"目录新建成功")
    else:
        print( f"老司机,<<{u_na}>>目录已存在。。。")
    n = 0
    for img in u_img:
        img_na = img.split('/')[-1]
        print(img_na)
        if os.path.exists(path+"//"+img_na) == True:
            print("文件已存在---","退出。")
            break
        else:
            imgresp = requests.get(img,headers=header)
    #         print(imgresp.status_code)
            with open(path+fr"//{img_na}",'wb') as f: 
                f.write(imgresp.content)
                print("正在下载,请耐心等待。。。")
                print("下载完成")
                n += 1
    print(f"共{n}张全部下完。")
推荐
joy8514 发表于 2022-4-20 08:29
# -*- coding:utf-8 -*-
这个要加上
推荐
Naive2021 发表于 2022-4-19 23:20
谢谢兄弟,图太顶了,已无心学习
12#
jay026 发表于 2022-4-19 22:38
顶贴,这是怎么判断的
13#
cdk005 发表于 2022-4-19 23:00
感谢楼主,我来试试,
14#
jcldkj 发表于 2022-4-19 23:06
楼主有心了
15#
notifier 发表于 2022-4-19 23:11
很不错,代码修改下也适用于其他网站。
16#
punkla 发表于 2022-4-20 00:00
谢谢兄弟分享
17#
KatharsisKing 发表于 2022-4-20 00:05
谢谢分享,研究一下代码
18#
chys 发表于 2022-4-20 00:07
这个怎么用,有没有相关教程推荐学习一下。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2022-6-27 08:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表