js提取指定网站内容(如何找出发送请求的js在控制数据的生成,我根本无法找到是哪一个js实现的)
优采云 发布时间: 2021-12-05 16:08js提取指定网站内容(如何找出发送请求的js在控制数据的生成,我根本无法找到是哪一个js实现的)
有很多页。当我们使用request发送请求时,返回的内容中没有页面显示数据。主要有两种情况。一种是通过ajax异步发送请求,得到响应并将数据放入页面。对于这种情况,我们可以查看ajax请求,然后分析ajax请求路径和响应,得到想要的数据;另一种是js动态加载的数据,然后放到页面中。在这两种情况下,当用户使用浏览器访问时,都不会发现任何异常,很快就会得到完整的页面。
其实我们之前学过一个selenium模块。通过操纵浏览器,然后获取浏览器显示的数据,可以通过这种方式获取数据,但是本节是分析如何发现js在控制数据的生成。以及js发送请求的路径,所以我们可以向这个路径发送请求,直接获取数据。
在之前的爬取过程中,我最烦的就是js动态生成的数据。我找不到实现了哪个js(因为js太多了)。今天看了大佬的博客,瞬间感觉简单了许多。, 感谢 Dao 提供 Dao 的博客:
一、需求描述和页面分析
一、要求说明
基页路径:
点击进入每个标题:
需求是抓取每个标题下的新闻内容
2. 页面分析
2.1 个主页
查看ajax请求:
接下来,我们将分析如何找出发送请求的js
二、找到发送请求的js
响应数据包括新闻标题和这条新闻的详情页路径,所以现在我们去访问详情页,分析详情页
访问详情页,查看详情页的响应,数据不收录具体数据,那么就和主页面一样,然后去ajax:
Ajax 没有新闻相关的数据,所以不使用ajax 请求来获取数据。只剩下js了。我们来看看是哪个js发送了获取数据的请求。上面的步骤是一样的:
详情页数据的js请求路径:
详情页请求路径:
我们可以看到,最后一个斜线之前的详情页数据的请求路径和最后一个斜线之前的详情页数据的请求路径是一样的。所以我们可以这样做:
第一步:获取详情页的请求路径:
url1='#39;
第二步:替换url1中最后一个斜杠后的内容
url2='%s/datae43e220633a65f9b6d8b53712cba9caa.js'%(url1.split('/')[3]) #用'/'分割url1得到第四部分,即索引为3,然后拼接进去
这样就构造了一个详细页面数据请求路径,然后就可以直接访问这个路径获取数据了,不需要访问详细页面。