您的位置:首页 > 其它

优美库图片系统

2019-10-26 22:23 169 查看

今天制作一个优美库图片小程序,网址

http://www.umei.cc/bizhitupian/

爬虫的相关流程:获取目标网址-获取数据-存储数据。下面是该网页的内容:

第一步:找到该网站下的便签,找到该标签网页下所有的url,这里的思路是获取该标签下的页数,通过循环拼接所有的url。

对电脑壁纸标签下的网页1(

<http://www.umei.cc/bizhitupian/diannaobizhi/1.htm>
)与网页2(
<http://www.umei.cc/bizhitupian/diannaobizhi/2.htm>
)进行比较,你会发现只是url中的数字发生改变,所以我们可以模拟构造url,进行图片链接的抓取。

代码段:

import  requests
from lxml import  etree
import  re
from urllib.request import urlretrieve
import  random
dict = {}
img_url = []
img = []
​
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
def Total_label():
'''获取标签并进行分类存放在字典中'''
response = requests.get('http://www.umei.cc/bizhitupian/').content
html = etree.HTML(response)
​
title = html.xpath("//div[@class='w850 l oh']//a/@title")
url = html.xpath("//div[@class='w850 l oh']//a/@href")
# 循环镶嵌将标题与url结合
index = 0
for i in title:
dict[i] = url[index]
index += 1
# for k, v in dict.items():
#     print(k , v)
# 抓取链接
def Grab(num):
'''获取每个标签下的总页数'''
url = dict[num]
# print(url)
response = requests.get(url,headers=headers,timeout=3)
# response.encoding = 'utf-8'
text = response.content.decode('utf-8')
html = etree.HTML(text)
pages = html.xpath("//div[@class='NewPages']//ul/li//@href")[-1].split('.')[0]
return (int(pages),url)
​
# 获取总页中所有分页的url
def get_paging(url,pages_n):
urls = [url+'{}.htm'.format(i) for i in range(1,pages_n+1)]
'''获取每个url下的图片链接'''
for i in urls:
response_time = requests.get(i, headers=headers, timeout=3)
# response.encoding = 'utf-8'
text = response_time.content.decode('utf-8')
html = etree.HTML(text)
jpg_url = html.xpath("//div[@class='TypeList']//a/@href")
for i in jpg_url:
img_url.append(i)

 

第二步:我们已经有了分页的url,我们再获取图片的url,进行下载即可:

def img_To_obtain():
'''图片获取'''
# 图片链接 Xpath语法://*[@id="ArticleId60"]/p/a/img/@src
# print(img_url)
for x in img_url:
response = requests.get(x,headers=headers,timeout=3)
text = response.content.decode('utf-8')
html = etree.HTML(text)
'''整站爬,分页,可以通过url进行判断
if 页数2 == 网页状态404:
只是一张图片
该系列有分页
'''
page_f = html.xpath('//*[@id="ArticleId60"]/p/a/img/@src')
for j in page_f:
img.append(j)
​
def extract():
'''随机获取一张图片'''
IMAGE_URL = random.choice(img)
The_suffix = IMAGE_URL.split('.')[3]
urlretrieve(IMAGE_URL, './image/img1.{}'.format(The_suffix))

 

主程序部分:

if __name__ == '__main__':
print('================欢迎来到图片选择器v1.0=====================')
print('''=====================提示信息=============================
1:电脑壁纸
2:手机壁纸
3.动态壁纸
。。。。
9:可爱壁纸
''')
Total_label()
num = str(input("请输入您的选择:"))
'''页数+标题url'''
page_n,url = Grab(num)
print('%s页数为:%s, url:%s'%(num,page_n,url))
get_paging(url,page_n)
extract()

实现效果:

结尾:

该程序比较低级,可以说很垃圾,小编自己都感觉很垃圾,有很多没有完善的地方,使用的面向过程的,没有多线程,没有异常处理,代码啰嗦等。

胜在学习思路吧,该网站是没有反爬的,基本网站,但是不要过度的请求,给对方服务器留条活路,后期会把完善的代码重做一期跟大家一起学习。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: