Python爬取小姐姐图片代码_批量下载
本帖最后由 OnlineYx 于 2021-1-13 14:44 编辑今天逛论坛,看到一个吾友分享的爬小姐姐图片的代码挺不错,原贴在这:https://www.52pojie.cn/thread-1348486-1-1.html
我试着改了一下,写了个循环和判断,输出起始网页的ID和结束网页的ID就能批量地下载小姐姐了。
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
dir_name0 =re.findall('<h1 class="post-title h1">(.*?)</h1>', html)[-1]
dir_name=str(i)+dir_name0
-------------------------------------------------------------------------
再次完善(关于正则部分)
爬取网页ID为12000之后的图片没有什么问题。
以网页ID12985为例
它的网页源代码图片部分是这样
但是在ID12000之前的网页,图片部分的源代码是这样
所以还需要加一个判断才能爬取到网页ID12000之前的图片
urls = re.findall('<img alt=".*?" loading=lazy src="(.*?)" alt=""', html)
if len(urls)==0:
urls = re.findall('<a href="(.*?)" alt=".*?" title=".*?">', html)
chaselove 发表于 2021-1-24 22:02
楼主,亲测序号9,76,376什么的都下不了,这规则怎么看呀,元素调不出网址呀
写个判断,加正则表达式
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("按回车键退出") OnlineYx 发表于 2021-1-24 22:09
写个判断,加正则表达式
import os
import time
9还是下不了呀 1200之前的规则好像也不都是一样的 我懂我懂。 別想誘惑我了,我的盤已經紅了,存不下了。 以前下载了好几个G的压缩包 都没打开过 换硬盘忘记了给格了 想誘惑我,晕 有方法能不用一个链接一个链接的都下载吗, ai19ai 发表于 2021-1-12 19:12
有方法能不用一个链接一个链接的都下载吗,
我没其他方法了,只懂一点皮毛,蹲一个大佬来优化。 学习一下,学习简直就是永无止境,感谢 感谢 分享!!! 不错不错。