先学了requests库的一些基本操作,简单的爬了一下。
用到了requests.get()方法,就是以GET方式请求网页,得到一个Response
对象。不加headers的话可能会400error所以加上: page=requests.get(url='https://www.zhihu.com/question/46508954',headers=hd)
还用到了一些os模块的方法,os.mkdir(x)用于在x目录下创建一个文件夹,os.path.exists(path)用于检测当前路径是否存在。
还有就是regex了,由于很简单就不说了。
先用requests.get()进入知乎问题界面,然后观察html发现每个jpg都包含在一个<figure>语句内,然后搞个正则提取出所有图片的url,注意有jpg和gif两种区分下。然后对每个图片进行下载,当做二进制文件。一开始有若干图片会400加上headers就好了。
1 import re 2 import requests 3 import os 4 import random 5 hd={ 6 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) 98 Safari/537.36' 7 } 8 adr='C:/face' 9 def dowload(i,url): 10 global adr 11 if url==None: 12 return 13 res=requests.get(url,headers=hd) 14 if url.find('jpg')!=-1: 15 with open(adr+'/zhihu'+str(i)+'.jpg','wb') as f: 16 f.write(res.content) 17 elif url.find('gif')!=-1: 18 with open(adr+'/zhihu'+str(i)+'.gif','wb') as f: 19 f.write(res.content) 20 else: 21 print('error',url) 22 def gethtml(): 23 page=requests.get(url='https://www.zhihu.com/question/46508954',headers=hd) 24 page.encoding='utf-8' 25 pattern=re.compile(r'<figure>.*?(https.*?(?:jpg|gif)).*?</figure>') 26 res=pattern.findall(page.text) 27 global adr 28 if os.path.exists(adr)==False: 29 os.mkdir(adr) 30 else: 31 adr=adr+str(random.randint(1,1000)) 32 pre,tot=0,len(res) 33 for i,url in enumerate(res): 34 dowload(i,url) 35 rate=int((i+1)/tot*100) 36 if rate!=pre: 37 pre=rate 38 print(str(rate)+'%') 39 gethtml() 40 print('图片已保存在'+adr+'目录!')