Fork me on GitHub

如何优雅的“轮带逛”初级篇——获取单张图片

这是崔斯特的第六篇原创文章

轮子哥护体

首先上收藏夹 https://www.zhihu.com/collection/78172986?page=1

由@vega13创建,内容挺多的。例如,

等等,看的老夫脸都红了

写了一个简单爬取图片的程序。记录下过程。手动 @轮子哥

1、分析网页

收藏夹只收藏了问题的一个答案,初步想法是获取当前页面的图片

因为上一次原因,直接去网页源代码

<img src="https://pic4.zhimg.com/de5ecb16bcb912e99a83f647eb96c5bb_200x112.jpg" data-rawwidth="1080" data-rawheight="1080" class="origin_image inline-img zh-lightbox-thumb" data-original="https://pic4.zhimg.com/de5ecb16bcb912e99a83f647eb96c5bb_r.jpg">

<img data-rawwidth="1280" data-rawheight="1836" src="https://pic2.zhimg.com/v2-61ba67d910104f99acdb805a3568ab05_200x112.jpg" class="origin_image inline-img zh-lightbox-thumb" data-original="https://pic2.zhimg.com/v2-61ba67d910104f99acdb805a3568ab05_r.jpg">

<img>标签下,srcdata-original都含有图片链接,经验证data-original是大图,那就把每个问题的图片链接找到了,接下来就很简单了。

2、代码

就18行的代码。简单吧~

import requests,urllib
from lxml import etree

def get_img(url):
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}
    r= requests.get(url,headers=headers).text
    s = etree.HTML(r)
    #print(r)
    link = s.xpath('//img/@data-original')
    for i in link:
        print(i)
        name = i.split('/')[-1]#图片名称
        urllib.request.urlretrieve(i,name)

if __name__ == '__main__':
    for i in range(1,43):
        url = 'https://www.zhihu.com/collection/78172986?page=' + str(i)
        get_img(url)

但是这样存在一个问题

link = s.xpath('//img/@data-original')

这里的link只有每个回答的第一张图片,更多的图片藏在文本中,除了正则不知道还有没有更好的办法

只有200多张图片。结尾有百度云

下载了几分钟出现错误,有一张图片下载不了,知友们有什么好办法吗?

三、“轮带逛”高级篇

既然有初级篇,肯定还有高级篇。

其实这个收藏夹中每一个问题下面都含有很多回答,收藏夹只是选取其中一个,也就是被轮子哥点赞的那个,那么还有那些没有被点赞的呢?

下一期讲一讲怎么获取所有图片链接。

放一张图片,卡死我程序的

—————————————最后的小广告—————————————–

有朋友竟然叫我去作一期直播,讲一讲Python。

打算根据自己的经历分享一些经验,主要是关于Python入门的,想听听可以私信我。

时间是周二晚9点~


百度云下载

链接:http://pan.baidu.com/s/1dFOPbUx 密码:abrl