马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 太阳总会升起 于 2020-12-23 10:00 编辑
呦吼,俺在鱼兮发的第一个资源分享,还请各位大佬批评指正!!!
这个是爬取美桌壁纸(http://www.win4000.com/)里面的明星图片板块,可以选择下载的页数及每页的组数
上代码
import requests
from lxml import etree
import os
# etree解析网页并返回
def parse(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
}
text = requests.get(url=url, headers=headers).text
html = etree.HTML(text)
return html
# 获取总页面数
def get_page(base_url):
html = parse(base_url)
pages = html.xpath('//div[@class="main"]//div[@class="pages"]/div/a[@class="num"][last()]/text()')[0]
return pages
# 获取每页超链接的url
def get_a_url(page_url):
html = parse(page_url)
a_url = html.xpath('//div[@class="w1180 clearfix"]//div[@class="tab_tj"]//ul[@class="clearfix"]//a/@href')
return a_url
# 获取每个超链接对应图片组的个数
def get_img_count(a_url):
html = parse(a_url)
img_count = len(html.xpath('//ul[@id="scroll"]/li'))
return img_count
# 获取每个超链接对应图片组的个数的url
def get_img_url(img_page_url):
html = parse(img_page_url)
img_url = html.xpath('//img[@class="pic-large"]/@src')[0]
return img_url
# 保存图片
def save_img(img_url, name):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
}
img_name = img_url.split('/')[-1]
res = requests.get(url=img_url, headers=headers)
img_data = res.content
if not os.path.isdir(f'.\\{name}_img'):
os.mkdir(f'.\\{name}_img')
with open(f'.\\{name}_img\\{img_name}', 'wb') as f:
f.write(img_data)
# 主函数
def main():
name = input("请输入想要下载的爱豆姓名:")
pinyin = input("请输入对应的汉语拼音:")
# 蔡徐坤是例外,单独处理
if name == '蔡徐坤':
pinyin = 'Angy'
base_url = f'http://www.win4000.com/mt/{pinyin}.html'
# 获取总页面数
try:
page_count = get_page(base_url)
except:
print("没有找到您的爱豆,要不换一个下载试试^_^")
exit()
# 获取用户想要下载的页面数
try:
page_num = int(input(f"爬取到该爱豆图片共【{page_count}】页,请输入想要下载的页数:"))
except:
print("输入数字都能错???,搁这玩我呢…………")
exit()
# 判断用户输入是否合法
if page_num > int(page_count) or page_num < 1:
print(f"你想上天啊,总共就 {page_count} 页,你输 {page_num} 想死啊 %¥#&……*&$^")
else:
try:
# 遍历下载页面
for i in range(1, page_num+1):
page_url = f'http://www.win4000.com/mt/{pinyin}_{str(i)}.html'
a_url_list = get_a_url(page_url)
print(f"第【{i}】页获取成功" + '\n')
a_url_list_len = len(a_url_list)
print(f"第【{i}】页共有[{a_url_list_len}]组图片")
a_count = int(input(f"你想下载第【{i}】页多少组图片呢?"))
# 遍历每页的每组图片
for group in range(a_count):
# 获取每页对应图片组的个数
img_count = get_img_count(a_url_list[group])
print(f"第【{i}】页第[{group+1}]组图片爬取中……" + '\n')
# 遍历每个组对应图片的url
for j in range(1, img_count+1):
img_page_url = os.path.splitext(a_url_list[group])[0] + f'_{j}' + os.path.splitext(a_url_list[group])[1]
img_url = get_img_url(img_page_url)
print(f"第【{i}】页第[{group+1}]组图片下载成功,正在保存该组第 {j} 张图片")
save_img(img_url, name)
print(f"第【{i}】页第[{group+1}]组图片保存成功" + "o(*^@^*)o" + '\n')
print(f"第【{i}】页下载完成" + "`(*>﹏<*)′" + '\n')
print(f"您的爱豆 {name} 图片 {page_num} 页下载完成,图片保存在当前文件夹下的 {name}_img 文件夹下")
input("按回车退出程序")
except:
print("未知错误,爬取失败。。。")
exit()
main()
之后又用easygui改了个有UI界面的,用pyinstaller打包,并且把源码及打包后的exe可执行文件都放在了(https://wws.lanzous.com/iX7Majmg5wj
),自取 |