scrapy抓取瀑布流模式图片

2017-11-20  本文已影响0人  玩阿轲睡妲己

大家好,第一次在简书分享知识,请多指教~~

搜狗的图片质量实在是太棒了(清晰,大方),好啦,那就开始吧!

目标网页在这里,今天我们就抓取sogou的lofter图片,目前大概有1600张左右。

下面是目标图片:

目标页面

这个网页是瀑布流模式,初始展现在页面上的只有很少一部分

按下Chrome浏览器的F12,选择XHR,如下图

发现下面的列表里只有一个链接,它是目前为止网页中显示的东西。

然后把鼠标移动到页面上,往下滚动滑轮,发现图片像瀑布一样“刷”一下出来了,列表中出现了第二个链接,这个链接里就包含刚“刷”出来的图片的信息。

如图

右键选择Open link in new tab,打开以后发现是一写整整齐齐的数据,里面有想要的图片url,如图:

以此类推:把鼠标再往下滑,会发现又出来了几个链接,链接里的数据就是被渲染进网页再显示出来的图片。

那把这个链接内容获取下来再提取需要的图片url就行了。分析出来的链接:

http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=LOFTER&tag=%E5%85%A8%E9%83%A8&start=15&len=15

http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=LOFTER&tag=%E5%85%A8%E9%83%A8&start=30&len=15

发现只有末尾的start在变化,len表示的是从start位置再往后出现len张图片,可以用一个for循环依次叠加start,再把链接都放进start_urls列表里,但是有点麻烦

把尾部改成这样

&start=15&len=2000

每一张图片都有sthumbUrl格式的链接,随便选择一个打开看看

http://img01.sogoucdn.com/app/a/100520024/c612e7199aea6b687575f2ca112323c3

那么有多少个sthumbUrl就有多少张图片,出现的对应数据和搜索结果如下

共有1606张高清图片。

然后用scrapy获取 response.body,再用正则表达式提取出来sthumbUrl后面的图片url就可以了

正则表达式链接 :

Python 2.7.13

Python 3.6.1

提取方法:

pic_url = re.findall('"thumbUrl":"(.*?)",', html)

re.findall()返回html中所有的匹配结果列表,结果取括号部分(注意返回的是一个List)

根据图片的url就一个一个下载下来就行了

response = urllib2.urlopen(imgUrl)

fpi.write(response.read())

存到电脑上就ok啦

上一篇下一篇

猜你喜欢

热点阅读