AJAX 是 Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)的缩写。AJAX 通过使用原有的 web 标准组件,实现了在不重新加载整个页面的情况下,与服务器进行数据交互。例如在新浪微博中,你可以展开一条微博的评论,而不需要重新加载,或者打开一个新的页面。但是这些内容并不是一开始就在页面中的(这样页面就太大了),而是在你点击的时候被加载进来的。这就导致了你抓取这个页面的时候,并不能获得这些评论信息(因为你没有『展开』)。

AJAX 的一种常见用法是使用 AJAX 加载 JSON 数据,然后在浏览器端渲染。如果能直接抓取到 JSON 数据,会比 HTML 更容易解析。

AJAX 一般是通过 XMLHttpRequest 对象接口发送请求的,XMLHttpRequest 一般被缩写为 XHR。点击网络面板上漏斗形的过滤按钮,过滤出 XHR 请求。挨个查看每个请求,通过访问路径和预览,找到包含信息的请求。

爬取国家药品监督管理局中化妆品生产许可信息管理系统服务平台,其中每个企业的详细信息。

我们可以发现这是一个json动态页面,需要我们使用Ajax请求抓取页面数据。但是我们需要打印每个公司的详细信息,我们点开不同公司的详细信息后发现,每个公司的网址前面的都是相同的(都是:),唯一不同的是后面的id信息。而这个id可以从首页中抓取。

所有,我们只需要通过post方法抓取到首页信息,再将id信息存入名为id_list(自己定义的名字,任何名字都可以)的列表中即可。

我们得到id_list列表信息后,就可再次用post方法抓取这个页面的企业详细信息。通过遍历id信息,来查找每个企业的详细信息,并且打印。

最后,我们发现这个网址有300多页,如果我们想把所有页的所有企业的详细信息都打印下来怎么办呢?我们发现参数param中的page是一个动态变量,其代表的就是页码数。我们只需要通过for循环将页码数变量,即可完成对所有(也可以是任意页,可以从第n页到第m页,只需要控制for循环内的参数即可)页码所有企业详细信息数据的抓取打印。

发表评论

您的电子邮箱地址不会被公开。