V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gybciy1s1s1
V2EX  ›  外包

抓取一个带cookie验证的网页信息

  •  
  •   gybciy1s1s1 · 2013-11-25 14:39:39 +08:00 · 1028 次点击
    这是一个创建于 4020 天前的主题,其中的信息可能已经有所发展或是发生改变。
    之前在csdn上提问过,链接 http://bbs.csdn.net/topics/390639292?page=1#post-396048345
    要求:用java动态抓取一个指定网站的数据
    费用:500
    qq:245358419
    具体的qq联系,谢谢
    7 条回复    1970-01-01 08:00:00 +08:00
    omg
        1
    omg  
       2013-11-25 16:22:56 +08:00
    是不是需要用户登录,然后去搜索获取数据?
    txlty
        2
    txlty  
       2013-11-25 18:18:21 +08:00   ❤️ 1
    java的htmlunit应该可以全面模拟浏览器。
    你也可以想办法集成phantomjs,我用phantomjs试了一下:
    phantom.outputEncoding="gb2312";
    var page = require('webpage').create();
    page.viewportSize = { width: 1024, height: 768 };
    page.settings.userAgent = 'Mozilla/5.0 (Windows NT 5.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36'; //chrome
    page.settings.loadImages = true;
    page.settings.javascriptEnabled = true;
    page.open("http://www.yesinfo.com.cn/pqs_revision/pages/jsp/popuPublic.jsp", function(status) {
    page.onUrlChanged = function(url) { //当地址变化
    console.log("page url :"+url);
    };
    if (status !== 'success') {
    console.log('FAIL to load the address');
    phantom.exit();
    } else {
    window.setTimeout(function () {
    page.evaluate(function () {
    document.querySelector('input[name=cont_id]').value = 'ESPU8040903';
    document.querySelector('input[name=Submit12]').click();
    });
    }, 2000);
    window.setTimeout(function () {
    var cookie=page.evaluate(function () {
    return document.cookie;
    });
    var result=page.evaluate(function () {
    return document.querySelector('.sub_title ~ table').innerHTML;
    });
    console.log("cookie : "+cookie);
    console.log("result : "+result);
    phantom.exit();
    }, 5000);
    }
    });
    结果:
    gybciy1s1s1
        3
    gybciy1s1s1  
    OP
       2013-11-26 08:58:22 +08:00
    @omg 不用登陆的,是公共查询部分的内容
    gybciy1s1s1
        4
    gybciy1s1s1  
    OP
       2013-11-26 09:04:13 +08:00
    @txlty 谢谢,我试试,这个是要用在网站上的,所以如果能用js,那应该就可以了
    gybciy1s1s1
        5
    gybciy1s1s1  
    OP
       2013-11-26 10:26:49 +08:00
    这个功能要求是能在java web上使用的
    gybciy1s1s1
        6
    gybciy1s1s1  
    OP
       2013-11-26 13:50:23 +08:00
    @txlty phantomjs 要安装的,应该没办法集成到java web 开发里面去,我试了下htmlunit,写了以下代码:
    WebClient client = new WebClient(BrowserVersion.INTERNET_EXPLORER_7);

    //获取某网站页面
    HtmlPage page = client.getPage("http://www.yesinfo.com.cn/pqs_revision/pages/jsp/popuPublic.jsp");

    // System.out.println(page.getWebResponse().getContentAsString());
    //获取某页面元素,可通过id或name,(具体方式很多 --Foxswily)
    HtmlElement elmt = page.getElementById("containerId");

    elmt.click();
    elmt.type("PONU0693507");

    //获取按钮
    HtmlButtonInput loginBtn = (HtmlButtonInput)page.getElementByName("Submit12");
    //点击并获得返回结果
    Page resultPage = loginBtn.click();
    System.out.println(resultPage.getWebResponse().getContentAsString());

    发现被跳转到首页去了
    gybciy1s1s1
        7
    gybciy1s1s1  
    OP
       2013-11-26 14:40:36 +08:00
    已经外包出去了,谢谢大家
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3795 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 10:32 · PVG 18:32 · LAX 02:32 · JFK 05:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.