大家好,照片处理网站源码分享相信很多的网友都不是很明白,包括图片处理网站也是一样,不过没有关系,接下来就来为大家分享关于照片处理网站源码分享和图片处理网站的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!
上次聊到了《Go语言进阶之路(八):正则表达式》和《Go语言进阶之路:手撸一个LRU缓存》,这次利用正则表达式来编写一个并发爬虫。
私信“空姐”获取本爬虫源码!
说到爬虫,不得不提到前面写的《Python网络爬虫requests、bs4爬取空姐网图片》。这个爬虫很简洁,使用requests库发送http请求,使用bs4来解析html元素,获取所有图片地址。但是这个爬虫是单线程爬虫,速度太慢,一分钟只能爬下来300多张图片。所以,编写了Go语言的爬虫,亲测一分钟能爬下来800多张图片,速度提升了好几倍。先看一下效果图:
一、提取相册链接和下一页链接
1.1提取相册链接
首先,我们查看一下空姐网的网页结构,找到每个人的相册页面。在kongjie.com里面随意翻翻,就能找到热门相册页面,如图:
分析一下该页面结构,提取出每个人的相册页链接。
可以看到,ul下面包含了很多个li元素,每个li元素就是每个人的相册,li元素图片上的链接就是每个人的相册链接。所以我们写出提取ul元素的正则表达式为:
//用户相册块的正则表达式,用于从相册列表页提取出用户相册块,用户相册块中包含很多个用户的相册链接\nvarpeopleUlPattern=regexp.MustCompile(`<div\\s+?class=&34;>(?s:.*?)<ul\\s+?class=&34;>(?s:(.*?))</ul>`)
然后从ul元素中提取所有相册链接,正则表达式为:
//用户相册的正则表达式,用于从用户相册块提取出用户相册链接,然后就可以进入相册爬取图片了\nvarpeopleItemPattern=regexp.MustCompile(`<li\\s+?class=&34;>(?s:.*?)<div\\s+?class=&34;>(?s:.*?)<a\\s+?href=&34;>`)
有必要说一下,正常情况下,点号&34;能匹配除了换行符外的任意字符,但是在html匹配中有很多换行符,我们想让点号能匹配到换行符,我们需要使用&34;的形式,(?s:.*?)就表示这后面的点号可以匹配换行符了。其中的.*后面接问号?就表示这是正则表达式的勉强型匹配模式。想要详细了解勉强型匹配模式的可以看这篇文章《Go语言进阶之路(八):正则表达式》。
1.2提取下一页链接
处理完一页之后需要翻到下一页,所以我们需要提取“下一页”的链接。我们看一下“下一页”所在的元素位置:
“下一页”这个链接在<divclass=&34;>元素里面的<divclass=&34;>的元素里的最后一个链接,而且“下一页”这个链接的class=&34;。所以我们编写出正则表达式为:
//下一个相册列表页链接的正则表达式,用于从相册列表页提取出下一页链接,翻页爬取\nvarnextAlbumPageUrlPattern=regexp.MustCompile(`<div\\s+?class=&34;>(?s:.*?)</label>(?s:.*?)<a\\s+?href=&34;\\s+?class=&34;>下一页</a>`)
二、进入相册提取图片链接和下一张页面的链接
2.1提取图片链接
相册能提取了之后,我们进入相册,提取图片链接和下一张图片页面的链接。先来看一下图片浏览页的结构。
可以看到,图片在<divclass=&34;那个div元素里面的超链接中,所以我们写出正则表达式为:
//图片链接的正则表达式,用于从图片浏览页面的html内容中提取出图片链接,然后保存图片\nvarimageUrlPattern=regexp.MustCompile(`<div\\s+?id=&34;\\s+?class=&34;>(?s:.*?)<a\\s+?href=&34;(.*?)&34;pic&34;pnsmlnvvmmtmcl&34;btn&34;下一张&34;pns\\s+?mlnv\\s+?vm\\s+?mtm\\s+?cl&34;(.*?)&34;btn&34;下一张&34;.*?&34;下一张&34;Accept&34;text/html,application/xhtml+xml,application/xml&34;q=0.9,image/webp,*/*;q=0.8&34;Accept-Encoding&34;gzip,deflate,sdch&34;Accept-Language&34;zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4&34;Accept-Charset&34;utf-8&34;Connection&34;keep-alive&34;DNT&34;1&34;Host&34;www.kongjie.com&34;Referer&34;http://www.kongjie.com/home.php?mod=space&do=album&view=all&order=hot&page=1&34;Upgrade-Insecure-Requests&34;1&34;User-Agent&34;Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/58.0.3029.110Safari/537.36&34;GET&34;Content-Encoding&34;gzip&34;&34;errorhappenedwhenclosingresponsebody!&34;nopeopleListElement!,url=&34;allalbumscrawled!&34;&&34;allalbumscrawled!&34;&&34;nopeopleListElement!,url=&34;allalbumscrawled!&34;&&34;allalbumscrawled!&34;&&34;cannotfindanyuidPicId!imagePageUrl=&34;kongjie&34;:&34;&&34;kongjie&34;:&34;1&34;flyvar&34;tcp&34;127.0.0.1:6379&34;HEXISTS&34;redishexistserror!&34;_&34;_&34;imagesaved!&34;bytes.&34;Content-Encoding&34;gzip&34;”)\nutf8reader:=transform.NewReader(oldReader,e.NewDecoder())\n//此时htmlContent就已经是utf8编码了\nhtmlContent,_=ioutil.ReadAll(utf8reader)
项目源码在Github上,私信“空姐”获取源码!
参考文章
Python网络爬虫requests、bs4爬取空姐网图片Go语言进阶之路(八):正则表达式
好了,关于照片处理网站源码分享和图片处理网站的问题到这里结束啦,希望可以解决您的问题哈!