0
点赞
收藏
分享

微信扫一扫

python使用lxml爬取高清图库图片

如何让电脑与众不同?有的人靠外观,水果标,变形本,超轻薄等等,但有些人会采用更内秀的方式:换壁纸。壁纸有很多不同的种类,每个人的兴趣爱好不一样,所以选择也是不同的。


那么如何选择一个高逼格的壁纸呢。不同的人对逼格的理解不一样,比如有人觉得酷潮的逼格高,有人觉得有意境的逼格高,还有人觉得一些很厉害的动漫人物逼格高,有喜欢科幻的觉得宇航元素的逼格高,有喜欢潮牌的觉得一些logo壁纸挺不错的,所以选择一个逼格高的壁纸,还是要多多查看的!


之所以说了这么多,就是为了引出今天的主题,爬取高清的电脑壁纸。前面也给大家介绍过了一些关于图片的爬取,也有讲过关于必应壁纸的爬取,​​~~传送地址~~​​(主要爬取的是缩略图),但是每个网站的结构不一样 ,且每次的代码不一样,多少还是能够给大家带来一些思路和新的知识的。


接下来让我们步入今天的正题,爬取高清壁纸:

https://www.gqxz.com/

,打开这个网址后,让我们点击:电脑壁纸,手机壁纸,美女壁纸,明星图片后,发现每个地址的url,这样的话我们会把这些链接区分出来,以供选择。


以电脑壁纸为例,我们点击后更多后发现该页面地址为:

https://www.gqxz.com/wallpaper/1/

,其他的几个分类无非是后边的数字变动,我们再把这个数字给提取出来进行拼接,作为一个选择性的下载。到此为止我们可以得到我们获取的具体需要下载的分类地址。


python使用lxml爬取高清图库图片_html


然后我们对页面进行分析,我们可以查看到页面中没有多余的图片,所以我们想要获取写真套图的话,只需要使用lxml中的,

//img

直接获取到当前的套图信息。在此我们需要获取到套图的链接,以及当前套图的名称并保存到列表中。


接着我们查看每个套图的详情,审查元素,使用lxml的规则提取图片信息。如图:


python使用lxml爬取高清图库图片_html_02


所以我们要提取图片的地址的话应该 使用:

//div[@id="endtext"][@class="content_center"]/p/img/@src

接着在详情里面我们发现了分页,然后我们点击分页可以发现链接的规律。如下:

https://www.gqxz.com/wallpaper/2/6909_1.html
…………
https://www.gqxz.com/wallpaper/2/6909_9.html


从上可以看出,分页的话我们只需要替换_后面的数字就可以了。接下来让我们进入代码编写环节:


import re
import urllib
import requests
import os
from lxml import etree




def get_index_url():
a = eval(input("电脑壁纸按1、手机壁纸按2、美女图片按3、明星图片按4、搜索按5:"))
if a == 1:
search = input("风景1、美女2、植物3、汽车4、明星5、动漫6、建筑7、动物8:")
index_url = "https://www.gqxz.com/wallpaper/" + urllib.parse.quote(search) + "/"
elif a == 2:
search = input("风景1、美女2、植物3、游戏4、明星5、动漫6、动物7:")
index_url = "https://www.gqxz.com/mobile/" + urllib.parse.quote(search) + "/"
elif a == 3:
search = input("清纯1、性感2、日本3、车模宝贝4、丝袜美腿6、Cosplay7:")
index_url = "https://www.gqxz.com/beauty/" + urllib.parse.quote(search) + "/"
elif a == 4:
search = input("内地女星1、内地男星2、港台女星3、欧美女星7:")
index_url = "https://www.gqxz.com/star/" + urllib.parse.quote(search) + "/"
elif a == 5:
keyword = input("请输入搜索关键词:")
index_urls = "https://www.gqxz.com/search/?keyword="
index_url = index_urls + urllib.parse.quote(keyword, safe='/')
return index_url




def send_request(url):
return requests.get(url, headers=headers, timeout=3).content




def parse(html_str):
html = etree.HTML(html_str)
titles = html.xpath('//img')
# print(titles)
content_list = []
for title in titles[:30]:
item = {}
item['title'] = title.xpath('./@alt')[0]
item['href'] = "https://www.gqxz.com" + title.xpath('../@href')[0]
content_list.append(item)
print(item)
# print(content_list)
return content_list




# 获取每张写真集的img_url
def get_img_url(detail_html):
html = etree.HTML(detail_html)
img_url = html.xpath('//div[@id="endtext"][@class="content_center"]/p/img/@src')[0]
# print(img_url)
return img_url




def save_image(final_dir, img_url):
image_data = send_request(img_url)
file_name = final_dir + '/' + img_url[-9:]
with open(file_name, 'wb') as image:
image.write(image_data)




# 判断文件夹是否存在,不存在创建文件夹
def mkdir(dir_name):
if os.path.isdir("./pics" + "/" + dir_name) != True: # 如果保存的路径不存在
os.makedirs(r"./pics" + "/" + dir_name) # 如果不存在。我们将创立这个路径
path = "./pics" + "/" + dir_name + "/"
return path




if __name__ == '__main__':
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
"Referer": "https://www.mzitu.com/"
}


# 1. 获取网站url
index_url = get_index_url()
# 2. 解析url
html_str = send_request(index_url).decode()
# 3. 获取网站url中的写真的url
content_list = parse(html_str)
j = 1
# 获取每张写真集并解析
for content in content_list[:30]:
img_url_list = []
print("-" * 30 + '正在获取第{}套壁纸集'.format(int(j)) + "-" * 30)
j = j + 1
# 获取每张写真集的img_url
# 第一页的img地址
dir_name = content['title']
next_url = content['href']
print(dir_name)
# print(next_url)
detail_html = send_request(next_url)
img_url = get_img_url(detail_html)
a = img_url
b = 0
i = 1
while a != b:
final_dir = mkdir(dir_name)
if a != 0:
print(a + "下载完成!!")
save_image(final_dir, a)
a = b
i = i + 1
n = "_" + str(i) + ".html"
nexturl = re.sub(".html", n, next_url)
detail_html = send_request(nexturl)
img_url = get_img_url(detail_html)
b = img_url
print(a + "下载完成!!")
save_image(final_dir, a)
w = html_str
y = 0
s = 1
while w != y:
w = y
if w != 0:
# 3. 获取网站url中的写真的url
content_list = parse(html_str)
j = 1
# 获取每张写真集并解析
for content in content_list[:30]:
img_url_list = []
print("-" * 30 + '正在获取第{}套壁纸集'.format(int(j)) + "-" * 30)
j = j + 1
# 获取每张写真集的img_url
# 第一页的img地址
dir_name = content['title']
next_url = content['href']
print(dir_name)
# print(next_url)
detail_html = send_request(next_url)
img_url = get_img_url(detail_html)
a = img_url
b = 0
i = 1
while a != b:
final_dir = mkdir(dir_name)
if a != 0:
print(a + "下载完成!!")
save_image(final_dir, a)
a = b
i = i + 1
n = "_" + str(i) + ".html"
nexturl = re.sub(".html", n, next_url)
detail_html = send_request(nexturl)
img_url = get_img_url(detail_html)
b = img_url
print(a + "下载完成!!")
save_image(final_dir, a)


s = s + 1
t = "list_" + str(s) + ".html"
indexurl = index_url + t
print(indexurl)
html_str = send_request(indexurl).decode()
y = html_str





举报

相关推荐

0 条评论