如何获取这个政府网站的数据?

1.地址是:http://app1.sfda.gov.cn/datas...

2.想要获取的数据是
图片描述

3.调试工具
图片描述

4.自己测试POST的数据返回的值是
图片描述

图片描述

5.不知道哪里错了,求助大家了

阅读 6.4k
8 个回答

好厉害 这网站怎么做到的

具体是我F12 再点击td标签 竟然自动断点?> 然后返回100什么的

我试了下,发现返回结果与你的一样。这说明不是你的参数不全之类的问题,而是网站做了反爬,无法重试。所以你需要考虑的就是看看哪个参数是变化的以及从哪里可以获取获取这个参数。

chrome ctrl + shift + j

(function () {
    function devPage(jj) {
        return new Promise(r => {
            var curForm = document.getElementById('pageForm');
            curForm.curstart.value = jj;
            commitForECMA(function () {
                let request = this
                if (request.readyState == 4) {
                    if (request.status == 200) {
                        setTimeout(() => {
                            r(request.responseText)
                        }, 2e3)
                    }
                }
            }, 'search.jsp', curForm);
        })
    }

    async function a() {
        const el = document.createElement('html')
        for (let i = 1; i <= 11035; i++) {
            el.innerHTML = await devPage(i)
            el.querySelectorAll('a').forEach(t => {
                if (t.href.indexOf('javascript:commitForECMA(callbackC') === 0) {
                    console.log(t.innerHTML)
                }
            })
        }
    }

    a()
})()
新手上路,请多包涵

做一下浏览器伪装试一下,用httpclient之类的包

做浏览器插件处理吧。

自己用客户端拿的话,会很花时间。

这个站专门针对抓取作了处理的,而且整套机制是配合着前端 js 来的。要解析它的流程,需要人肉“翻译”它页面上的那段 js,那里面有些按位操作的东西,我猜就是它自己的一套“加解密逻辑”,好消息是,那段 js 代码还不算长。

哪来的什么加解密。。

request.onreadystatechange = callbackC;
function callbackC() {
    if (request.readyState == 1) document.getElementById("content").innerHTML="<br></br><br><img src=images/loading.gif>";
    if (request.readyState == 4) {
        if (request.status == 200) {
            oldContent[oldContent.length] = request.responseText;
            document.getElementById("content").innerHTML = request.responseText;
            request = null;
        }
        else {
            document.getElementById("content").innerHTML="<br><br><br><span style=font-size:x-large;color:#215add>服务器未返回数据</span>";
        }
    }
}

JSESSIONID的问题啦。

尝试了python下使用phantomjs模拟浏览器,来抓取目标网站的首页数据

1、request.js 文件

var url="http://app1.sfda.gov.cn/datasearch/face3/base.jsp?tableId=25&tableName=TABLE25&title=%B9%FA%B2%FA%D2%A9%C6%B7&bcId=124356560303886909015737447882";
var page = require('webpage').create();
page.open(url, function(status) {
  console.log(page.content);
  phantom.exit();
});

2、phantomjs request.js 获取的数据如下:
图片描述

最后也还是未成功获取到网页数据 = =!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题