- 分析目标源所有url
- 抓取URL
- 分析内容
- 入库
域名: https://www.duitang/
需抓取的分类/频道:时尚穿搭、美妆造型、婚礼婚纱
1.分析目标源所有url
此处发现,
频道的url为
图片详情页的url为
注意,此网站频道详情页运用异步无限加载方式加载所有blog,随着scrollbar的滚动,会通过api继续请求文章,返回的是json文件。
异步加载blog的api为
2.抓取url
一般的抓取url的思路是通过分析页面的html结构,找到特定结构位置上的链接,通过get请求访问该链接,进入到详情页,再获取内容。
但是这个网站就不需要如此麻烦的操作,原因有如下几点:
-
网站文章详情页内容和频道列表内容完全一致,都是图片+一段描述
-
网站虽然有翻页按钮,但是无限加载的json文件可以不需要出发翻页就能请求到所有数据
-
异步请求返回的json文件内有我们需要的所有内容,包括图片描述与图片地址
所以只需要不停的请求异步api就能够爬取到图片。下面我们来分析一下api。
由于其中有json_encode()的中文符号,我们把这段url放到浏览器里看一下
放大url部分
我们可以看到很多参数,再和其他url对比后发现,
影响获取到的json文件内容的参数有:
- filter_id=时尚搭配_搭配达人//按照<大分类>_<小分类>的格式经过json_encode()后得到
- start=24//这是分页数目,一页有25条记录
- _=1518201178347//这是大概是一个时间戳,且末尾的数字随api请求词数递增,每次加1。并且没有这个参数也能请求到数据。但是还是带上比较好,防止请求过期和被网站限制请求次数
3.分析内容
也就是说,我们可以通过更改以上三个参数,获取到json文件封装好的所有数据!我们把其中一个json文件取出来看一下它的结构:
可以看到,limit参数表示了json中item的数目,
object_list下的msg是我们需要的图片描述信息,
object_list下的photo中的path是我们需要的图片地址,
至此我们需要爬取的图片信息全部获取到。
4.整理入库
其实整个爬虫过程中,最需要时间的是嗅探url和整理入库这两步。
整理入库需要根据表结构在提取出有用的信息,再统一封装好存入数据库,这是一个很繁琐的过程。不过本次图片爬取先不细究改进入库和统一入库标准的操作,只研究到获取到文件为止。
我们已经有了图片的地址,那么如何将图片批量下载到本地呢?
在php中,只需调用file_get_contents()方法和file_put_contents()方法就可以了。
前者将文件读入到一个字符串中,地址可以填写网络地址;后者将字符串写进文件。
$img = file_get_contents($path);
file_put_contents(‘文件名’,$img);
用这两个核心语句就可以下载图片到本地了~!
更多推荐
php爬虫——以爬取图片为例
发布评论