Yesky网镁铝图片下载

看到这么多漂亮的妹纸,内心是久久不能平静啊(滑稽脸 ̄ω ̄=)。这不,只能靠记录下怎么获取妹子们图片的流程来安稳心神了ヽ( ̄▽ ̄)ノ。

Model

创建了一个类,初始化:

1
2
3
4
def __init__(self, url, title):
self.url = url
self.title = title
self.img_urls_list = [] # 列表,存储图片的链接

读取网页源码:

1
2
3
4
5
6
7
8
9
# 获取网页源码,带容错
def get_html(self, url, k=3):
count = 0
while count < k:
html = requests.get(url)
if html:
return html.text
count += 1
return None

这是将BeautifulSoup解析抽成一个方法,便于后面调用:

1
2
3
4
5
6
7
def get_html_soup(self, url):
html = self.get_html(url)
if not html:
print("It does not get the html.")
return None
html_soup = BeautifulSoup(html, 'html.parser')
return html_soup

获取某一页面上的镁铝图片链接:

1
2
3
4
5
6
7
8
9
10
11
# 返回该页面上的图片链接
def get_img(self, url):
html_soup = self.get_html_soup(url)
if not html_soup:
return None
select_list = html_soup.select(".l_effect_img_mid a img")
if not select_list:
print("select mistake.")
return None
item = select_list[0]
return item['src']

保存所有链接到列表:

1
2
3
4
5
6
7
8
9
10
# 保存所有图片的链接到列表(嵌套列表)
def get_img_urls(self):
html_soup = self.get_html_soup(self.url)
img_set = []
select_list = html_soup.select(".overview ul li a")
if select_list:
for item in select_list:
img_url = self.get_img(item['href'])
img_set.append(img_url)
self.img_urls_list.append(img_set)

最后便是保存图片,其中涉及到对标题需做一定的修改,确保文件夹创建成功:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 获取图片的名称,如 77VQ96UV4D9F.jpg
def get_img_name(self, url):
return url.split('/')[-1]
# 消除一些影响创建文件夹的特殊字符
def del_special_symbol(self, string):
return string.replace(':', '').replace('"', '').replace('?', '').strip()
# 保存图片至本地
def download_img(self, urls_list, file_path):
for url in urls_list: # 遍历一组照片链接列表
urllib.request.urlretrieve(url, file_path + '\\' + self.get_img_name(url)) # 下载图片
# 创建文件夹,并保存图片
def save_to_dir(self):
for item in self.img_urls_list: # 遍历各组图片链接列表
print(self.title, ' downloading...')
file_path = 'yeskyImgs\%s' % self.del_special_symbol(self.title) # 路径
if not os.path.exists(file_path):
os.makedirs(file_path) # 创建该组图片的文件夹
th = threading.Thread(target=self.download_img(item, file_path)) # 下载该组图片
th.start()

All Images

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def get_html(url, k=3):
count = 0
while count < k:
html = requests.get(url)
if html:
return html.text
count += 1
return None
def get_info(html):
html_soup = BeautifulSoup(html, 'html.parser')
select_list = html_soup.select(".lb_box dl dd a")
if select_list:
for item in select_list:
url = item['href'] # 跳转链接
title = item.string # 该组图片的标题
model = AModel(url, title)
model.get_img_urls() # 获取该组图片的所有链接
model.save_to_dir() # 保存图片到文件夹下

Run

1
2
3
4
5
6
7
8
if __name__ == '__main__':
url = 'http://pic.yesky.com/c/6_20491_%s.shtml'
start = time.time()
for page in range(1, 6):
html = AllPics.get_html(url % page)
AllPics.get_info(html)
end = time.time()
print('%.2f seconds' % (end - start))

图片下载到本地后的结果:
result

附上程序:https://github.com/asdfv1929/YeskyImagesSpider

------------- 本 文 结 束 感 谢 您 的 阅 读 -------------
坚持原创技术分享,您的支持将鼓励我继续创作!
0%