sep10.com
域名年龄: 11年10个月15天HTTP/1.1 302 Found 连接:关闭 其他指令:不缓存 缓存控制:不缓存 目标网址:/ HTTP/1.1 200 OK 服务器:GitHub.com 访问时间:2014年04月16日 12:46:54 类型:text/html; charset=utf-8 修改日期:2014年04月15日 17:02:54 Transfer-Encoding: chunked 过期时间:2014年04月16日 12:56:54 缓存控制:max-age=600 动作:Accept-Encoding Content-Encoding: gzip 网站编码:utf-8
首页文章列表搜索September 10th活在这草泥马的年代,就要时刻保持去他妹的心态用selenium和phantomjs抓取js加载的内容准备selenium是一个优秀的自动化测试工具,相信搞测试的同学们应该比较熟悉了。官网下载地址:http://docs.seleniumhq.org/download/下载selenium最新版,根据你所熟悉的开发语言选择不同的版本,支持Java、C#、Ruby、Python等,本文使用Java。phantomjs是一个基于webkit的无界面浏览器,也许正因为它没有界面,所以速度比FireFox,Chrome,IE等浏览器要快一些。官方网站:http://phantomjs.org/根据开发平台选择不同的版本,我准备了windows版本和linux两个版本,分别用作开发环境和生产环境,下载完成解压缩,放在任意目录下即可。开始selenium解压开,里面有一堆jar包,在eclipse新建一个工程,将需要的jar包引入到工程中,大致需要的jar包如下:commons-exec-xxx.jarcommons-io-xxx.jarcommons-logging-xxx.jarguava-xxx.jarhttpclient-xxx.jarhttpcore-xxx.jarjson-xxx.jarphantomjsdriver-xxx.jarselenium-java-xxx.jar各位同学可以在开发过程中,根据提示添加其他依赖jar包。首先实例化一个“浏览器”:DesiredCapabilities capabilities = new DesiredCapabilities();capabilities.setCapability("phantomjs.binary.path","F:/phantomjs/phantomjs.exe"); //传入phantomjs可执行文件路径capabilities.setCapability("phantomjs.page.settings.userAgent", "sep10 spider");//设置User-Agent字符串,非必须capabilities.setCapability("phantomjs.page.settings.loadImages",false); //设置是否加载图片,默认为truecapabilities.setJavascriptEnabled(true); //是否启用jsWebDriver browser = new PhantomJSDriver(capabilities);有了“浏览器”,就可以试着打开一些页面了:browser.get("http://sep10.com");这时候,phantomjs会请求给定的网址,并渲染页面,执行js代码,然后把内容保存在内存中,可以通过以下方法对得到的内容进行分析://通过元素id查找WebElement logo = browser.findElement(By.id("logo"));//通过标签名查找List<WebElement> divs = browser.findElements(By.tagName("div"));//通过class名查找List<WebElement> containers = browser.findElements(By.className("container"));//通过xpath方式查找,得到所有含有href属性的a标签List<WebElement> a = browser.findElements(By.xpath("//a[@href]")); //还可以通过css样式选择,通过name属性查找等等。......有了WebElement,可以对其进一步查找,了解过DOM模型的人,肯定不陌生,这里还可以获取元素的属性和文本:String id = logo.getAttribute("id");String text = logo.getText();由于phantomjs是没有界面的,有的时候我们看不到phantomjs到底打开了一个怎样的页面,这时候可以截个图看一下:File f = ((TakesScreenshot)browser).getScreenshotAs(OutputType.FILE);FileUtils.copyFile(f, new File("E:/sep10.com.jpg"));值得一提的是,selenium在截图时,无论页面有多么的长,都会完整的截取下来。最后,一定要记得关闭“浏览器”,否则即使程序停止了,phantomjs的进程依然会存在。browser.quit();实践根据上面的介绍,我们来小小的试验一下。细心的同学们可能会发现,使用HttpClient抓取内容,遇到异步加载的页面就显得力不从心了,比如京东商城的价格那部分,下面写个程序试验一下。public static void main(String[] args) {DesiredCapabilities capabilities = new DesiredCapabilities();capabilities.setCapability("phantomjs.binary.path","F:/phantomjs/phantomjs.exe");capabilities.setJavascriptEnabled(true);WebDriver browser = new PhantomJSDriver(capabilities);browser.get("http://item.jd.com/999872.html");WebElement price = browser.findElement(By.id("jd-price"));System.out.println(price.getText());browser.quit();}输出:¥12898.00参考文档selenium官方文档:http://docs.seleniumhq.org/docs/Flume-NG自定义拦截器Flume NG是一个分布式、可靠的日志收集、聚合系统,最早由cloudera开发,作为之前Flume OG的一个分支,更加简单,体积更加小,更容易部署。之前一直使用的是flume自带的TimestampInterceptor来按天分割日志,但是最近公司服务器时钟同步出了问题,导致收集上来的日志总是会包含一部分前一天的日志,或者后一天的日志,在对日志进行计算时,如果剔除掉,会造成数据不够准确,如果不剔除,又比较麻烦,会出现各种问题,所以想自定义拦截器,取出日志中的时间当做Header中的时间戳,不再以服务器时间作为时间戳,这样,就可以解决了。首先,新建一个工程,引入所需jar包,必要的jar包有以下三个:flume-ng-configuration-1.4.0-cdh4.4.0.jarflume-ng-core-1.4.0-cdh4.4.0.jarflume-ng-sd
© 2010 - 2020 网站综合信息查询 同IP网站查询 相关类似网站查询 网站备案查询网站地图 最新查询 最近更新 优秀网站 热门网站 全部网站 同IP查询 备案查询
2025-09-07 02:53, Process in 0.0108 second.