PYTHON爬虫基础(三)-动态页面处理

发布于 2023-08-21  333 次阅读


  • 在前面两篇中,我们简单使用了request+re实现了提取网页的静态内容,但是更多的网页是有ajax或者xhr动态生成的, 去许多元素的内容并不会一开始就被写死在html里面,而是html的框架生成后由js写入进去的,这样,前两章的方法就失去作用了

api逆向

  • 注意:不是所有api都能给随便爬的,这里只用来做个知识记录,不得用作违法用途

  • 比如这是我写的一个页面,我们在页面上看到成都的关键字

  • 但是在页面源代码中搜索成都却无法得到具体的内容

  • 这是因为我们在html中并没有写入这些数据,而是提前创建了一个tbody的元素占位,它的id是showfilebody

  • 那么数据是如何展示的呢?我们通过ajax异步请求了后端的api,然后重写拥有showfilebody的tbody的元素内容(innerHTML)

  • 既然明白了原理,那么想要这种动态页面的数据就很简单了,只需要找出后端的api就行了,在一些较为困难的情况下,我们需要读原网页的js代码,理清逻辑,不过更多情况下我们可以通过下面的方法轻松的找到后端的api

  • 先打开控制台,选择网络

  • 然后ctrl+f搜索关键字,点击搜索结果

  • 这样就能定位到api的具体请求了,可以看到,这个api返回了动态更新的所有json数据

  • 点击标头,或者header来查看这个请求的具体url

  • 然后我们自己访问这个api,发现成功拿到数据,然后编写爬虫爬取这个api并且进行数据处理即可

伪造header

  • 对于上面的情况,有的时候api找到之后访问不了,或者本来页面就需要登录,这时候就需要改一下header了

(像这里就有个jwt的验证,不验证是进不去的)

  • 我们在request请求的时候,把刚才的通过控制台找到的header带上,即可访问成功
headers = {
        'Accept':'*/*',
        'Accept-Encoding':'gzip, deflate',
        'Accept-Language':'zh-CN,zh;q=0.9',
        'Authorization':'xxx',
        'Content-Type':'application/json',
        'Host':'xxx',
        'Origin':'xxx',
        'Referer':'xxx',
        'Sdp-App-Session':'session',
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'
    }
    aim = requests.get('xxx',headers=headers)

  • 其实针对这个网站,可以测试出来控制登录的有Authorization字段和Sdp-App-Session字段,Authorization是一个jwt的token,解一下可以知道这个token的有效期是一天,所以如果要写爬虫,每隔一天就要换一次这俩参数
届ける言葉を今は育ててる
最后更新于 2024-02-07