CTO练习营 | 12月3-5日,深圳,是时刻成为优良的技巧治理者了
根据属性名称很轻易知道对应的内容含义,这里我们只需关怀 postlist 这个属性,它对应的一个数组元素就是一个图集,图集元素中有几项属性我们须要用到:
- url:单个图集浏览的页面地址
- post_id:图集编号,在网站中应当是独一的,可以用来断定是否已经抓取过该内容
- site_id:作者站点编号 ,构建图片来源链接要用到
- title:标题
- excerpt:摘要文字
- type:图集类型,今朝发明两种,一种multi-photo是纯照片,一种text是文字与图片混淆的文┞仿式页面,两种内容构造不合,须要不合的抓取方法,本例中只抓取纯照片类型,text类型直接丢弃
- tags:图集标签,有多个
- image_count:图片数量
- images:图片列表,它是一个对象数组,每个对象中包含一个img_id属性须要用到
一、内容分析
接下来创建一个爬虫项目,以 图虫网 为例抓取琅绫擎的图片。在顶部菜单“发明” “标签”琅绫擎是对各类图片的分类,点击一个标签,比如“美男”,网页的链接为:https://tuchong.com/tags/美男/,我们以此作为爬虫人口,分析一下该页面:
打开页面后出现一个个的图集,点击图集可全屏浏览图片,向下滚动页面会出现更多的图集,没有页码翻页的设置。Chrome右键“检查元素”打开开辟者对象,检查页面源码,内容部分如下:
- <div class="content">
- <div class="widget-gallery">
- <ul class="pagelist-wrapper">
- <li class="gallery-item...
可以断定每一个li.gallery-item是一个图集的人口,存放在ul.pagelist-wrapper下,div.widget-gallery是一个容器,如不雅应用 xpath 拔取应当是://div[@class=”widget-gallery”]/ul/li,按照一般页面的逻辑,在li.gallery-item下面找到对应的链接地址,再往下深刻一层页面抓取图片。
然则如不雅用类似 Postman 的HTTP调试对象请求该页面,获得的内容是:
- <div class="content">
- <div class="widget-gallery"></div>
- </div>
- https://tuchong.com/rest/tags/美男/posts?page=1&count=20&order=weekly&before_timestamp=
参数很简单,page是页码,count是每页图集数量,order是排序,before_timestamp为空,图虫因为是推送内容式的网站,是以before_timestamp应当是一个时光值,不合的时光会显示不合的内容,这里我们把它丢弃,不推敲时光直接大年夜最新的页面向前抓取。
三、重要代码
请求结不雅为JSON格局内容,降低了抓取难度,结不雅如下: