python编程做材料表面评价_可以用 Python 编程语言做哪些神奇好玩的事情?

再次更新

这次点赞上两百了。没想到,上知乎第一次这么多赞,哈哈。自我满足一下。我观察了下,有时候想下载知乎某个视频还挺麻烦的,为了感谢各位大佬捧场,我做了个小脚本,可以下载知乎视频,不过只支持安卓手机和电脑,苹果手机由于封闭性没法下载视频,有需要的可以复制下面链接在浏览器打开下载视频

你们是魔鬼吗,我瞎几把回答的问题 点赞都快破百了,受宠若惊啊

工作原因,领导让我熟悉几天python,好接手项目。

大概从变量的声明到面向对象以及包的使用,基本上都熟悉了以后,就想着有没有什么东西能练手的,让自己熟悉熟悉

思来想去,记得之前浏览知乎的时候,好像看到一个话题,晒了很多胸(印象实在深刻),感觉还不错,如果能用python把这些图片批量下载分页保存的话,也能大概达到练手的目的了

所以,开始动手

首先根据惯例,得去找到这个话题的链接:

找到之后,打开浏览器的 network 查看请求的链接。

经过一番筛选,找到了需要的请求链接,返回的是json格式数据。答主们的回答内容全在一个 'content'里面,这里就需要将json字符串转换成python的字典,然后就能直接获取'content'里面的 'html' 内容啦。

获取到html后,稍微看下就能找到很多图片链接,但是有些是没用的。我经过仔细对比后,发现有用的图片基本上都在 data-original 这个属性里面,好 那么就用正则提取出来(我正则只是入门阶段,根据网上的匹配规则,自己照葫芦画瓢写了一个 'data-original="(.+?)"',使用 findall 匹配出来是一个列表)

再循环下载到本地即可。

不过,在这过程中还是遇到一些问题。通过python模拟浏览器请求链接,通常要加 headers 才行,不过我只加了一个 user-agent ,当图片下载完成之后,却发现好多图片根本没法打开,我就奇怪了。调试了一会儿,发现请求的某些图片,状态码返回 504 ,也就是说请求失败咯。解决方法也简单,通过浏览器打开这张图片,查看发送的header头,将 python 中的 headers 照着浏览器补全即可。然后删了所有图片,再次运行即可完美下载~

应题目要求,说明为什么用python,因为练了手才知道,开发起来真特么快啊。平时做点小工具之类的,首选python,会节约很多开发时间

还有,我得匿了。被小姐姐们看到了会被打的

应知友的呼声,我把代码贴出来供大家学习,学习,学习!!目的是学习,不过学习过后也可以将欣赏下学习成果,达到劳逸结合的效果。(代码中有第三方包,所以自行下载啦)噢 对了,代码中有点小BUG,最后会多创建一个文件夹,是因为逻辑的先后顺序问题。不过不影响使用,懒得改了

import re

import json

import requests

import os

import time

class Pics:

def __init__(self):

self.header = {

'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3551.3 Safari/537.36',

'Upgrade-Insecure-Requests':'1',

'accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',

}

# 获取问题的json链接

self.url = 'https://www.zhihu.com/api/v4/questions/58498720/answers?include=content&limit=20&offset=0&sort_by=default'

# 存放根目录路径

self.base_dir = 'D:/pics/'

#问题链接

self.index_url = 'https://www.zhihu.com/question/58498720'

self.page = ''

self.makeNewSession()

def makeNewSession(self):

requests.get(self.index_url, headers=self.header)

self.session = requests.session()

def getContent(self):

print('正在扒%s'%self.url)

json_str = self.session.get(self.url, headers=self.header)

json_obj = json.loads(json_str.content.decode())

data = json_obj.get('data')

if data:

self.url = json_obj.get('paging').get('next')

else:

self.url = ''

for i in data:

self.formatPic(i.get('content'))

def formatPic(self,content):

result = list(set(re.findall(r'data-original="(.+?)"', content))) #正则获取图片 然后去重

for i in result:

path,authority = self.makePicName(i)

pic = self.session.get(i,headers=self.header)

if pic.status_code != 200:

print('图片:'+i+'获取失败')

print('状态码:'+pic.status_code)

time.sleep(3)

self.savePic(pic,path)

def savePic(self,pic,name):

with open(self.page+name,'wb') as f:

f.write(pic.content)

print('保存图片'+self.page+name)

def makePicName(self,link):

rindex = link.rfind('/')

index = link.find('pic')

return link[rindex:],link[index:rindex]

def mkdir(self,path):

print('创建'+path)

path = self.base_dir + path

is_exists = os.path.exists(path)

if not is_exists:

os.mkdir(path)

self.page = path

def run(self):

index = 1

is_exists = os.path.exists(self.base_dir)

if not is_exists:

os.mkdir(self.base_dir)

while True:

if self.url == '':

break

page = '第{}页'.format(index)

self.mkdir(page)

self.getContent()

index += 1

print('图片扒取完毕')

if __name__ == '__main__':

pic = Pics()

pic.run()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值