优美库图片系统
Posted xbhog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优美库图片系统相关的知识,希望对你有一定的参考价值。
今天制作一个优美库图片小程序,网址http://www.umei.cc/bizhitupian/
,
爬虫的相关流程:获取目标网址-获取数据-存储数据。下面是该网页的内容:
对电脑壁纸标签下的网页1(<http://www.umei.cc/bizhitupian/diannaobizhi/1.htm>
)与网页2(<http://www.umei.cc/bizhitupian/diannaobizhi/2.htm>
)进行比较,你会发现只是url中的数字发生改变,所以我们可以模拟构造url,进行图片链接的抓取。
代码段:
1 import requests 2 from lxml import etree 3 import re 4 from urllib.request import urlretrieve 5 import random 6 dict = {} 7 img_url = [] 8 img = [] 9 ? 10 headers = { 11 ‘user-agent‘: ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/67.0.3396.99 Safari/537.36‘ 12 } 13 def Total_label(): 14 ‘‘‘获取标签并进行分类存放在字典中‘‘‘ 15 response = requests.get(‘http://www.umei.cc/bizhitupian/‘).content 16 html = etree.HTML(response) 17 ? 18 title = html.xpath("//div[@class=‘w850 l oh‘]//a/@title") 19 url = html.xpath("//div[@class=‘w850 l oh‘]//a/@href") 20 # 循环镶嵌将标题与url结合 21 index = 0 22 for i in title: 23 dict[i] = url[index] 24 index += 1 25 # for k, v in dict.items(): 26 # print(k , v) 27 # 抓取链接 28 def Grab(num): 29 ‘‘‘获取每个标签下的总页数‘‘‘ 30 url = dict[num] 31 # print(url) 32 response = requests.get(url,headers=headers,timeout=3) 33 # response.encoding = ‘utf-8‘ 34 text = response.content.decode(‘utf-8‘) 35 html = etree.HTML(text) 36 pages = html.xpath("//div[@class=‘NewPages‘]//ul/li//@href")[-1].split(‘.‘)[0] 37 return (int(pages),url) 38 ? 39 # 获取总页中所有分页的url 40 def get_paging(url,pages_n): 41 urls = [url+‘{}.htm‘.format(i) for i in range(1,pages_n+1)] 42 ‘‘‘获取每个url下的图片链接‘‘‘ 43 for i in urls: 44 response_time = requests.get(i, headers=headers, timeout=3) 45 # response.encoding = ‘utf-8‘ 46 text = response_time.content.decode(‘utf-8‘) 47 html = etree.HTML(text) 48 jpg_url = html.xpath("//div[@class=‘TypeList‘]//a/@href") 49 for i in jpg_url: 50 img_url.append(i)
第二步:我们已经有了分页的url,我们再获取图片的url,进行下载即可:
1 def img_To_obtain(): 2 ‘‘‘图片获取‘‘‘ 3 # 图片链接 Xpath语法://*[@id="ArticleId60"]/p/a/img/@src 4 # print(img_url) 5 for x in img_url: 6 response = requests.get(x,headers=headers,timeout=3) 7 text = response.content.decode(‘utf-8‘) 8 html = etree.HTML(text) 9 ‘‘‘整站爬,分页,可以通过url进行判断 10 if 页数2 == 网页状态404: 11 只是一张图片 12 该系列有分页 13 ‘‘‘ 14 page_f = html.xpath(‘//*[@id="ArticleId60"]/p/a/img/@src‘) 15 for j in page_f: 16 img.append(j) 17 ? 18 def extract(): 19 ‘‘‘随机获取一张图片‘‘‘ 20 IMAGE_URL = random.choice(img) 21 The_suffix = IMAGE_URL.split(‘.‘)[3] 22 urlretrieve(IMAGE_URL, ‘./image/img1.{}‘.format(The_suffix))
主程序部分:
1 if __name__ == ‘__main__‘: 2 print(‘================欢迎来到图片选择器v1.0=====================‘) 3 print(‘‘‘=====================提示信息============================= 4 1:电脑壁纸 5 2:手机壁纸 6 3.动态壁纸 7 。。。。 8 9:可爱壁纸 9 ‘‘‘) 10 Total_label() 11 num = str(input("请输入您的选择:")) 12 ‘‘‘页数+标题url‘‘‘ 13 page_n,url = Grab(num) 14 print(‘%s页数为:%s, url:%s‘%(num,page_n,url)) 15 get_paging(url,page_n) 16 extract()
实现效果:
结尾:
该程序比较低级,可以说很垃圾,小编自己都感觉很垃圾,有很多没有完善的地方,使用的面向过程的,没有多线程,没有异常处理,代码啰嗦等。
胜在学习思路吧,该网站是没有反爬的,基本网站,但是不要过度的请求,给对方服务器留条活路,后期会把完善的代码重做一期跟大家一起学习。
以上是关于优美库图片系统的主要内容,如果未能解决你的问题,请参考以下文章