requests库/爬取zhihu表情包

  先学了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+'目录!')

 

posted @ 2019-01-07 19:14  *zzq  阅读(320)  评论(0编辑  收藏  举报