python爬虫抓取为空,或者网页提示:很抱歉,我们目前暂时不支持 IE 浏览器...

在使用requests爬取网页数据的时候,发现抓下来的网页代码里,find_all找对应class name下的数据,一直是空,但网页确实是请求抓下来了。通过查看抓下来的网页代码,发现里面有段文字提示:'很抱歉,我们目前暂时不支持 IE 浏览器,请使用 Chrome、Edge 等现代浏览器代替。点击确定后将会自动跳转到 Chrome 下载地址 :)'

看到这里,本来我以为是不是Python默认的请求被识别成IE浏览器了,因此参考浏览器上的请求字段,加上了header、cookie等各种,但依旧不生效。

后来发现其实这句话在网页源代码里就有,只是网页里用来在识别到是IE浏览器打开的时候报错的,并不是我这次抓取的问题。接下来,仔细对比抓取到的网页和实际网页,发现其实是因为requests请求到的网页代码数据缺少了一部分。

而这块的原因就是因为这个网页上的数据是js动态加载的,所以导致我们用requests抓到网页时,数据还没加载显示出来,所以是空的。

解决方案:

1)直接找网页上请求对应数据的接口URL,请求这个URL得到JSON格式的数据进行解析。

步骤:点击检查-network-fetch/XHR,刷新下网页,然后挨个点击,查看response,如果有你想要的数据,那就看header里对应的网址就是我们需要的。tips:response如果很长,直接复制到json.cn里查看即可。

优点:得到的数据结构很清晰,直接就是JSON格式,方便处理,不需要再从网页里去寻找想要的数据。

缺点:很多网址对应的后端接口URL是有鉴权检验的,只是有header和cookie并不能访问成功,对于这种是完全没办法处理的。

成功示例:以https://www.thesaurus.com/browse/football#网站为例,如果我们要抓取同义词数据,但是由于网页里结构比较复杂,还可以切tab,分tab的数据并不是在网页代码里,切完之后代码也变了,这个就非常不便于抓取,所以可以尝试直接抓取对应的后端接口。

 找到对应接口后,发现请求能成功,那就完美了,可以直接请求这个接口得到想要的数据。

失败示例:比如fanyi.baidu.com

比如想直接抓取后端翻译接口的翻译结果,通过上述方法发现了后端请求接口,但实际请求发现总是报错,就说明应该是有鉴权机制,无法直接请求,这种情况只能用方法2.

 想要验证这个后端接口有没有鉴权,还有个简单的方法:直接复制链接到浏览器打开,能看到想要的数据就是能请求的啦。如下图,是不是很简单。

能访问:

不能访问:

 2)使用selenium来实现抓取动态加载的网站。

selenium介绍的文章就非常多了,核心要点就是:selenium是模拟浏览器去请求的网站,抓取来下的结果与我们再浏览器上看到的一致,这样就能得到动态加载之后的数据啦。使用selenium抓取的核心步骤见此文章:http://t.csdn.cn/GrX4A​​​​​​​

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值