优美库图片系统
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()
实现效果:
结尾:
该程序比较低级,可以说很垃圾,小编自己都感觉很垃圾,有很多没有完善的地方,使用的面向过程的,没有多线程,没有异常处理,代码啰嗦等。
胜在学习思路吧,该网站是没有反爬的,基本网站,但是不要过度的请求,给对方服务器留条活路,后期会把完善的代码重做一期跟大家一起学习。
相关文章推荐
- 调用系统剪切方法,剪切任意比例图片
- [置顶] Android 7.0 调用系统拍照,相册,剪裁,修复拍照图片旋转问题
- Win10系统文件显示模式设置以便显示图片更多的详细信息
- Android手机调用系统相机拍照、裁剪以及获取Url上传图片
- 城市道路监控系统PC电脑端版车牌SDK开发包图片抓拍视频流检测识别
- MVP模式的Android 调用系统拍照,相册,剪裁,适配到7.0,修复拍照图片旋转问题
- Android 调用系统功能实现图片选择器,你可能会遇到的问题汇总
- 公路隧道通风设计分析系统图片
- 获取系统图片,并放入ImageList
- 系统界面图片
- iOS 获取系统图片
- Android 系统图片选择 展示 以及长按删除
- 图片检索系统开篇(Image Indexing and Searching)
- js组件SlotMachine实现图片切换效果制作抽奖系统
- 解决android4.4以上系统的相册选择图片后获取不到有效的URI
- 保存图片到系统相册
- Android之附加图片2—— 从系统图库中选择图片
- android系统方法裁剪图片部分手机显示为圆形
- 小程序生成图片保存到系统相册
- Android 6.0系统中图片剪切空指针崩溃问题解决纪录