爬取网页动态加载的评论

14 篇文章 2 订阅
5 篇文章 1 订阅

超时的处理

爬虫在向服务器请求时,若是服务器没有顺利返回响应,爬虫就会一直等待

有时这种长时间等待是没有没价值的

在requests.get()里添加参数,设置一个等待时间,若是响应超过这段时间还没有返回,就返回异常报告(ConnectTimeout)

#设置超时时间是0.001秒:
response=requests.get(url,timeout=0.001)

AJAX、检查工具里的network和XHR

1.AJAX(Asynchronous JavaScript And XML):

一种异步更新技术,更新网页的部分内容,但是不重新加载整个网页(url不会变)。

在一些网站里,评论就是用JavaScript加载的,在一个<script>的标签内,这些评论数据就不会加载在初次出现的网页源代码里。

2.解释为什么requests请求到的响应会没有element里的标签:

浏览器打开一个网页,用右键【检查】打开查看网页源代码:

 在【element】中,我们可以找到标签:<span class="reply-content">

而在右键【查看网页源代码】打开的网页里(打开的数据就是我们用requests爬到的):

是找不到这个标签(即使是在网页更新出新内容,再打开源代码,其内容也不会变)

3.network和XHR

右键【检查】或是【F12】打开的小窗的选择栏里有network这个栏目:

左侧红色的小灯:灯亮表示一直在监听页面内通过点击、按键发送的请求

禁止的符号:清除的意思,会清除掉我们找到的页内响应

XHR:不更新网页也可以传输的对象(比如页面内没有展开的评论和回复)

requests、network、SHR和json进行动态网页爬虫:

1、捕获网页源代码里没有的信息,比如说动态加载的评论

1.点击【network】中【禁止符号】对当前的XHR对象进行清除

2.在某网站的某个视频下点击了加载评论的按钮

 3.可以发现有新的XHR对象出现(这难道就是传说中的抓包!)对应网页内评论完成更新,XHR对象完成更新(时间差完全可以忽略),在size列下也可以看XHR对象的数据大小。

4.查看这个XHR对象是不是真的有评论数据:

点击这个XHR对象,点击【Preview】进行内容预览,里面是json数据,点击【replies】慢慢往下掏,就有响应的评论内容:

 

2、打开这个XHR对象的【headers】,组装requests请求url: 

将【authority】、【path】 和【scheme】组装成一个url:

 3、用requests进行爬取:

import requests

url="阿巴阿巴"

headers={"user-agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3877.400 QQBrowser/10.8.4533.400"}

response=requests.get(url,headers=headers)

print(response.text)

4、json模块进行数据提取:

json是一种字典和列表组成的数据格式,可以做为XHR的一种传输文件格式。

导入和调用模块(python自带):

import json
words=response.content.decode("UTF8")
json_=json.loads(words)

一个json格式化的网页:JSON在线解析及格式化验证 - JSON.cn

 根据网页解析的分枝数格式进行编写代码:

comments=[]
id_names=[]
members=json_["data"]["replies"] 
for each_member in members:    
      comment=each_member["content"]["message"]
      comments.append(comment)
      id_name=each_member["member"]["uname"]
      id_names.append(id_name)

5、进行数据的简单保存: 

with open("comments.txt","w+",encoding="utf8") as f:
    for i in range(len(id_names)):
        f.write(id_names[i]+":\n"+comments[i]+"\n\n")
    f.close()

 

参考书籍: python网络爬虫从入门到实践 编者:唐松

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄思博呀

真的有人打赏啊,超级感谢!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值