(直接需要代码的看最后面,前面只是分析)

当你查看知乎某个问题的答案时,通过普通的方法爬取页面,你发现只能爬取一页的内容,当你点击下一页时,浏览器地址并没有发生变化,这种技术叫做AJAX,每次载入的只是部分数据,当知道这个后,就可以构造特殊的头部来请求获得数据。

知乎问题下的解析:

可以看到请求页面的方式GET,请求的地址为Request URL,请求头的构成为Request Header的内容,有点长是不是。

Request Header:

还有一个就是Query String Parameters

这是什么呢,这就是我们Request URL的请求的数据部分了,他是怎么区分页面的呢,我们看第二页的请求数据

两者不同的是 offset这个值,而知乎一个页面的回答数量刚好是20,也就是差值。

到这里我们就可以知道怎么样获取我们请求的数据了:

用GET方法向指定URL发送我们的请求数据

下面是代码实现:

import urllib.request
import json
import urllib.parse
import re
import random
n=0
for i in range(0,10):                                                                           #爬取十页的回答的图片url='https://www.zhihu.com/api/v4/questions/27761934/answers?'                      #请求URL地址data={}head={}#head为请求头部封装head['User-Agent']='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'head['accept']='application/json, text/plain, */*'# head['Accept-Encoding']='utf-8, deflate, sdch, br'head['Accept-Language']='zh-CN,zh;q=0.8'head['Referer']='https://www.zhihu.com/question/27761934'head['authorization']='oauth c3cef7c66a1843f8b3a9e6a1e3160e20'head['Connection']='keep-alive'head['host']='www.zhihu.com'head['Cookie']='q_c1=cb235bc32c3c4ff6a13d539ab32932ed|1491640993000|1491640993000;' \' r_cap_id="OTk4MDc1ZTYzZTYxNDhkMGFkZmMzZmMyY2MzYTQ0MWM=|1492689948|ea65e09abdd21db7eecd997d1e7689d7213005c8"; ' \'cap_id="ZWY2NDA1MTc3ZjAzNDc2MWFmNTQ4YjFkY2NhNzdmZjM=|1492689948|16df8cfc942dcae5adc9ffa5395afbdcc87bf39a";' \' l_cap_id="ZGNkOGVmZTgzNDk0NGJjOTljMzU0Mjc0MGY2YmU1ODE=|1492689948|2768d12cd0236bb96722f7216b307ba799d4bf19"; ' \'aliyungf_tc=AQAAABxPakPO4goAgVG3PSefHqc6PP2k; acw_tc=AQAAAEUxcRqsHQwAgVG3PZaK3p0hk5Lq'#data为数据部分data['sort_by']='default'data['include']='data[*].is_normal,is_sticky,collapsed_by,suggest_edit,comment_count,' \'can_comment,content,editable_content,voteup_count,reshipment_settings,' \'comment_permission,mark_infos,created_time,updated_time,' \'relationship.is_authorized,is_author,voting,is_thanked,is_nothelp,' \'upvoted_followees;data[*].author.badge[?(type=best_answerer)].topics'data['limit']=20data['offset']=3+20*idata=urllib.parse.urlencode(data).encode('utf-8')req=urllib.request.Request(url,data,head,method='GET')#需指定方法,默认是为POST的req = urllib.request.urlopen(req)re_data = req.read().decode('gbk')print(re_data)pe='https:.{0,80}jpg'                                                   #构造的正则,有点丑陋。。。url1=re.compile(pe)num=0q=random.randint(1,20)for x in url1.findall(re_data):if 'https'  in x:print(x)try:if(num%4==0):urllib.request.urlretrieve(x, 'F:\\ccc3\\test\\mmmmmm'+str(q)+'%s.jpg' % num)print('下载第'+str(n) + '张图片')n+=1except:print('error')num +=1





其中head的cookie,host,connection等都是可以省略的。
已知缺陷:json里同一个链接出现四次,我用num处理的有点难看
有最大爬取数,不超过一千,可以用ip池解决
正则丑陋。
爬取别的问题需要修改的是URL里的数字及head['Referer']里的数字,数字为问题的代码,代码为:

里面的数字,如果代码不能运行请修改cookie和authorization为自己的.
如还不能运行,评论或者私信我








												

爬虫之爬取知乎下某个问题下的全部图片(处理AJAX请求,解析json数据)相关推荐

  1. python爬虫知乎图片_python爬虫(爬取知乎答案图片)

    python爬虫(爬取知乎答案图片) 1.⾸先,你要在电脑⾥安装 python 的环境 我会提供2.7和3.6两个版本的代码,但是本⽂只以python3.6版本为例. 安装完成后,打开你电脑的终端(T ...

  2. 使用Python+xpath爬取知网所有中英文期刊的封面背景图片

    使用Python+xpath+beautifulsoup爬取知网所有中英文期刊的封面背景图片` import json import requests from bs4 import Beautifu ...

  3. 爬取知乎“凡尔赛语录”话题下的所有回答,我知道点开看你的很帅气,但还是没我帅

    凡尔赛文学火了.这种特殊的网络文体,常出现在朋友圈或微博,以波澜不惊的口吻,假装不经意地炫富.秀恩爱. 普通的炫耀,无非在社交网络发发跑车照片,或不经意露出名牌包包 logo,但凡尔赛文学还不这么直接 ...

  4. Python动态网页爬虫之爬取知乎话题回答

    你是如何开始能写Python爬虫?就这个问题我查看了一下知乎,看到各种大牛写的心得,感觉受益匪浅,于是我有了一种冲动,想把各种大牛回答的心得爬取下来,以后可以细细品味. 首先我们在浏览器输入https ...

  5. 【一学就会】爬取知乎热榜话题下的回答及评论点赞数

    最近印度新冠疫情爆发,连我国都有好几个城市出现了印度的变异病毒.为此,我特意去知乎上逛了逛关于印度疫情的话题 [如何看待全球新冠确诊超 1.5 亿,印度单日新增确诊连续 9 天超 30 万例,未来国际 ...

  6. 《原生爬虫》爬取某直播平台某分类下的主播人气,生成排行榜

    此原生爬虫项目旨在爬取直播平台(本项目以pandaTV为例)上某分类(本项目为Dota2)的主播人气,进行排行.得出排行榜. 首先对爬虫的框架进行分析,得到以下思维导图: 从思维导图中可以得到该爬虫应 ...

  7. python爬虫之爬取知乎发现

    源码已放GitHub:zhihuexplore 此次使用到的库有四个 请求+解析 urljoin为urllib库里面的一个整合相对链接的方法 可以对链接进行一个合并 利用了beautifulsoup的 ...

  8. 数据挖掘 文本分类 知乎问题单分类(二):爬取知乎某话题下的问题(数据爬取)

    数据挖掘 文本分类 知乎问题单分类(二):爬取知乎某话题下的问题(数据爬取) 爬虫目标 Scrapy框架介绍 Scrapy框架原理 [^1] Scrapy工作流程 [^2] 具体实现 安装Scrapy ...

  9. Scrapy爬取知乎Python专题精华,连答主头像都给爬下来,不放过一切

    前些天写的一篇"我与Scrapy的初次相识,理论+实战入门Scrapy "都上首页推荐了,到现在浏览量还没破百,难受. 写的不好大概,不过只要有一人看,都是鼓励,一直写,一直积淀, ...

最新文章

  1. C++ 函数的模板的使用
  2. 16.1、python初识面向对象(1)
  3. 三步更改win7开机密码
  4. C++ Opengl 显示TGA文件和扩展名源码
  5. windows环境下python 虚拟环境的创建和使用(virtualenvwrapper)
  6. 基于Jedis的工具类
  7. mysql回调地狱_es6 promise 所见
  8. 饿汉式单例模式,懒汉式单例模式
  9. C语言里的符号重载《C专家编程》
  10. maven [INFO] No proxies configured [INFO] No proxy was configured, downloading directly
  11. Ubuntu安装翻译软件(goldendcit)
  12. insert on duplicate key update命令
  13. RK3568 Android12 移除电池图标和设置选项
  14. 漫谈微信libco协程设计及实现(万字长文)
  15. Codeforces869 E. The Untended Antiquity (随机化算法)
  16. 算法竞赛入门经典(第二版)第三章习题
  17. mysql和python先学哪个_Python之路-python(mysql介绍和安装、pymysql、ORM sqlachemy)
  18. 怎么做好网络口碑营销呢?
  19. Notability work with acrobat pro dc
  20. 单机启动schedule报错:Get http://127.0.0.1:10251/healthz: dial tcp 127.0.0.1:10251: connect: connection ref

热门文章

  1. centos7安装tomcat步骤
  2. calcHist()函数 OPENCV
  3. 发现一个很强的国产软件。可以给视频加动画大头贴
  4. reactJS入门学习
  5. 通用汽车发布下一代Ultra Cruise方案,高阶智驾争夺战白热化
  6. 开源无人机手机地面站之Towe(一)
  7. poj 3243:A Simple Problem with Integers
  8. 用eclipse编写第一个程序详解(hello world)
  9. HTML5+CSS3笔记01(标签)
  10. java mysql 参数化_JavaMySQL中like的参数化查询