百度图片的网页是一个动态页面,它的网页原始数据是没有图片的,通过运行 JavaScript ,把图片数据插入到网页的 html 标签里,所以在原始数据里是没有图片的,它只在运行时加载和渲染,得通过抓包的方式来爬取。
打开百度图片搜索 吉娃娃 关键字,然后 F12 打开开发者工具 Network -> XHR -> Preview ,向下滑动滚动条到一定程度时会出现 acjson?tn=resultijson_com$ipn=rj$ct=20132659..... 这样的请求,这是条 json 数据,点开 data ,可以看到里面有 0-29 ,共 30 条数据,每一条都对应一张图片。
百度图片刚开始只加载了 30 张图片,滑动滚动条时,页面会动态加载 1 条 json 数据,每条 json 数据里面包含了30 条信息,信息里面包含了图片的 URL ,JavaScript 会将这些 URL 解析并显示出来。滚动条滚动到底时重复这一操作。
观察 Headers 下 Query String Parameters 里的 pn 字段,第一条 json 数据为 30