大家好,第一次在简书分享知识,请多指教~~
搜狗的图片质量实在是太棒了(清晰,大方),好啦,那就开始吧!
目标网页在 这里 ,今天我们就抓取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就可以了
正则表达式链接 :
提取方法:
pic_url = re.findall('"thumbUrl":"(.*?)",', html)
re.findall()返回html中所有的匹配结果列表,结果取括号部分(注意返回的是一个List)
根据图片的url就一个一个下载下来就行了
response = urllib2.urlopen(imgUrl)
fpi.write(response.read())
存到电脑上就ok啦