吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5359|回复: 31
收起左侧

[Python 转载] Python爬取小姐姐图片代码_批量下载

   关闭 [复制链接]
OnlineYx 发表于 2021-1-12 18:52
本帖最后由 OnlineYx 于 2021-1-13 14:44 编辑

今天逛论坛,看到一个吾友分享的爬小姐姐图片的代码挺不错,原贴在这:https://www.52pojie.cn/thread-1348486-1-1.html
我试着改了一下,写了个循环和判断,输出起始网页的ID和结束网页的ID就能批量地下载小姐姐了。

001.png

002.jpg

003.jpg

004.jpg

[Python] 纯文本查看 复制代码
import os
import time
import requests
import re
headers = {
    'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
    'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
    'Accept-Encoding': 'gzip',
    "Referer": "https://www.baidu.com/"
}
httpnum = int(input("请输入爬取网页的起始ID:"))
httpnum1 = int(input("请输入爬取网页的结束ID:"))
for i in range(httpnum,httpnum1+1):
    httpurl = "https://www.vmgirls.com/{0}.html".format(i)
    response = requests.get(httpurl, headers=headers)
    html = response.text
    if str("<style></style><meta name=keywords content=") not in html:
        print("{0}网页不存在".format(i))
        continue
    else:
        dir_name = re.findall('<h1 class="post-title h1">(.*?)</h1>', html)[-1]
        if not os.path.exists(dir_name):
            os.mkdir(dir_name)
        urls = re.findall('<a href="(.*?)" alt=".*?" title=".*?">', html)
        for url in urls:
            time.sleep(1)
            name = url.split('/')[-1]
            response = requests.get("https:" + url, headers=headers)
            print(name + "正在下载")
            with open(dir_name + '/' + name, 'wb') as f:
                f.write(response.content)
        print("{0}下载完毕".format(i))
print("全部下载完毕")


-------------------------------------------------------------------------
刚刚又稍微改了一下代码,在目录前加上一个网页ID
[Python] 纯文本查看 复制代码
dir_name0 =re.findall('<h1 class="post-title h1">(.*?)</h1>', html)[-1]
        dir_name=str(i)+dir_name0


001.png

-------------------------------------------------------------------------
再次完善(关于正则部分)
爬取网页ID为12000之后的图片没有什么问题。
以网页ID12985为例
它的网页源代码图片部分是这样

003.png

但是在ID12000之前的网页,图片部分的源代码是这样


004.png

所以还需要加一个判断才能爬取到网页ID12000之前的图片
[Python] 纯文本查看 复制代码
urls = re.findall('<img alt=".*?" loading=lazy src="(.*?)" alt=""', html)
        if len(urls)==0:
            urls = re.findall('<a href="(.*?)" alt=".*?" title=".*?">', html)



免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
l2430478 + 1 + 1 我很赞同!
中原暴徒 + 1 + 1 热心回复!

查看全部评分

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

 楼主| OnlineYx 发表于 2021-1-24 22:09
chaselove 发表于 2021-1-24 22:02
楼主,亲测序号9,76,376什么的都下不了,这规则怎么看呀,元素调不出网址呀

写个判断,加正则表达式
[Python] 纯文本查看 复制代码
import os
import time
import requests
import re
headers = {
    'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
    'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
    'Accept-Encoding': 'gzip',
    "Referer": "https://www.baidu.com/"
}
httpnum = int(input("请输入爬取网页的起始ID:"))
httpnum1 = int(input("请输入爬取网页的结束ID:"))
for i in range(httpnum,httpnum1+1):
    httpurl = "https://www.vmgirls.com/{0}.html".format(i)
    response = requests.get(httpurl, headers=headers)
    html = response.text
    if str("<style></style><meta name=keywords content=") not in html:
        print("{0}网页不存在".format(i))
        continue
    else:
        dir_name0 =re.findall('<h1 class="post-title h1">(.*?)</h1>', html)[-1]
        dir_name=str(i)+dir_name0
        if not os.path.exists(dir_name):
            os.mkdir(dir_name)
        u1 = re.findall('<img alt=".*?" loading=lazy src="(.*?)" alt=', html)
        u2 = re.findall('<a href="(.*?)" alt=".*?" title=".*?">', html)
        u3 = re.findall('style=".*?" data-pagespeed-lsc-url="https:(.*?)"/>', html)
        urls=u1
        if len(u1)==0:
            urls = u2
            if len(u2)==0:
                urls = u3
        for url in urls:
            time.sleep(1)
            name = url.split('/')[-1]
            response = requests.get("https:" + url, headers=headers)
            print(name + "正在下载")
            with open(dir_name + '/' + name, 'wb') as f:
                f.write(response.content)
        print("{0}下载完毕".format(i))
print("全部下载完毕")
input("按回车键退出")
chaselove 发表于 2021-1-27 18:52
OnlineYx 发表于 2021-1-24 22:09
写个判断,加正则表达式
[mw_shl_code=python,true]import os
import time

9还是下不了呀 1200之前的规则好像也不都是一样的
99丶 发表于 2021-1-12 18:56
列明 发表于 2021-1-12 19:02
別想誘惑我了,我的盤已經紅了,存不下了。
1sina 发表于 2021-1-12 19:10
以前下载了好几个G的压缩包 都没打开过 换硬盘忘记了给格了
VIP007 发表于 2021-1-12 19:11
想誘惑我,晕
ai19ai 发表于 2021-1-12 19:12
有方法能不用一个链接一个链接的都下载吗,
 楼主| OnlineYx 发表于 2021-1-12 19:16
ai19ai 发表于 2021-1-12 19:12
有方法能不用一个链接一个链接的都下载吗,

我没其他方法了,只懂一点皮毛,蹲一个大佬来优化。
ladiosfei 发表于 2021-1-12 19:16
学习一下,学习简直就是永无止境,感谢
outerstone 发表于 2021-1-12 19:24
感谢 分享!!!
江篱 发表于 2021-1-12 19:32
不错不错。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-25 19:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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