python3 网络爬虫(三)利用post请求获取网页的动态加载数据

时间:2024-04-14 07:41:02

环境:python3.4
win7
框架:scrapy

上一篇讲了利用get请求获取王爷的动态加载数据,这一篇文章让我们来简单介绍一下如何用post请求来获取网页的动态加载数据,这一次我们面对的是某音乐网站的歌曲评论,利用 谷歌浏览器 - F12(开发者工具) - 查看Headers 的方式我们可以查看在浏览该网页时的一些信息:(如何抓包,上一篇文章已经介绍了,有兴趣的可以去看看,这里就不多介绍)

python3 网络爬虫(三)利用post请求获取网页的动态加载数据

可以看到评论页是利用了ajax渲染的动态页,不过基于上一篇的分析方法,对于如何去查找以及请求这类动态页相信已经不是难事,那么我们尝试着将网址复制到地址栏打开,看看结果如何:

python3 网络爬虫(三)利用post请求获取网页的动态加载数据

结果是一片空白,刚开始我也百思不得其解,这到底是怎么回事,后来在我疯狂百度和高人指点之后,发现这个评论的请求方式是post,关于post和get的区别,大家可以看看这位大神的博文:http://www.cnblogs.com/ranyonsue/p/5984001.html

简单来说,我们用get请求的方式是打不开这个动态加载的评论页的,于是乎我就想尝试着构造一个post请求来打开这个评论页:
#-----------------------------------------------------post请求ajax
print(type(response))
url = '(这个地方我删掉了,大家根据自己需要访问的来写)'
header={}
header['Accept']='*/*'
header['Accept-Encoding']='gzip, deflate'
header['Accept-Language']='zh-CN,zh;q=0.8'
header['Connection']='keep-alive'
header['Content-Length']='6'
header['Content-Type']='application/x-www-form-urlencoded'
header['Host']='(这个地方我删掉了,大家根据自己需要访问的来写)'
header['Origin']='(这个地方我删掉了,大家根据自己需要访问的来写)'
header['Referer']='(这个地方我删掉了,大家根据自己需要访问的来写)'
header['User-Agent']='(这个地方我删掉了,大家根据自己需要访问的来写)'
header['X-Requested']='XMLHttpRequest'
data ={'type':'3' }
r=requests.post(url,data=data,headers=header)
htmlcontent=r.content.decode('utf-8')
s1=BeautifulSoup(htmlcontent,'lxml').find_all('div',class_ ='brief')
for s in s1:
print(s.div.contents[0])
#-------------------------------post请求ajax

补充说明,data数据是在Headers里 Form Data中存在了的数据,构造post请求需要带上它,那么我们看看结果:

python3 网络爬虫(三)利用post请求获取网页的动态加载数据

好的,结果正确,如果需要爬取所有页的评论,也是如此类推,方法相似,相信大家都能做出来,下一篇还没想好介绍点什么,或许会讲讲基于cookies的模拟登录吧,谢谢大家的收看,再会