知乎里那些绝美的壁纸在这里!

**喜欢刷知乎的同志们会知道知乎里好看的壁纸有很多,今天笔者就把它全爬下来。

问题链接:https://www.zhihu.com/question/308072414/answer/581633043
打开知乎的这个回答下拉右边的滑动框,不难发现这个网页是动态加载的,打开f12分析请求所有的回答都被写入了js每当下拉框拉到最底部客户端就会发出一个请求,然后服务器返回js文件。再次观察这个请求url,它们的数据基本一样唯一不一样的就是最后的offset值,每个请求offse值加5。
分析到这就有思路了,根据规律构造请求的url然后进行循环,可是问题又来了,循环多少次呢?然后用浏览器打开请求看下(我建议用火狐打开,结构清晰明了)会发现有个is_end字段,当字段的值是false的时候请求是可用的也就是说服务器会返回图片信息,当字段值为true服务器对于此请求不返回需要的信息。好了循环的时候只需要查看一下is_end的字段值就可以确定什么时候结束训话。中间的部分肯定就比较简单了,返回的js文件是json类型的,首先要给它loads一下。然后匹配图片再保存到文件夹就行了。**

首先构造请求头:

header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
    ,'cookie':  ' ' #  加上自己的cookie值
}

创建文件夹:

path_file = 'F:/知乎壁纸/img'
if not os.path.exists(path_file):
    os.makedirs(path_file)
else:
    print('路径不存在')

构造url:

k = 0
i = 3
while True:

    url = 'https://www.zhihu.com/api/v4/questions/308072414/answers?include=data[*].' \
          'is_normal%2Cadmin_closed_comment%2Creward_info%2Cis_collapsed%2Cannotation' \
          '_action%2Cannotation_detail%2Ccollapse_reason%2Cis_sticky%2Ccollapsed_by%2Csuggest' \
          '_edit%2Ccomment_count%2Ccan_comment%2Ccontent%2Ceditable_content%2Cvoteup_' \
          'count%2Creshipment_settings%2Ccomment_permission%2Ccreated_time%2Cupdated' \
          '_time%2Creview_info%2Crelevant_info%2Cquestion%2Cexcerpt%2Crelationship.' \
          'is_authorized%2Cis_author%2Cvoting%2Cis_thanked%2Cis_nothelp%2Cis_labeled%3Bdata[*].' \
          'mark_infos[*].url%3Bdata[*].author.follower_count%2Cbadge[*].' \
          'topics&limit=5&offset={}&platform=desktop&sort_by=default'.format(str(i))

接下来就是用匹配信息找到图片链接进而保存在文件夹下:

etree_pic = html.etree
        codes = etree_pic.HTML(pic_link_codes)
        link = codes.xpath("//figure/noscript/img/@src") #  用xpath匹配所有的图片链接
        file_name_path = str(k) + '.jpg'
        for lin in link:  # 遍历链接
            file_name_path = str(k) + '.jpg'
            request.urlretrieve(lin, filename=path_file + os.sep + file_name_path) # 保存在当地文件夹下
            k = k + 1
            print('正在打印第' + str(k) + '张壁纸') 
            print(lin)
    except Exception as e:
        print(e+'\''+'没有您需要请求的内容')
    else:
        continue

打开你的文件夹就发现你要的精美壁纸都在里边

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值