简单爬虫实战
2015-07-31 16:26
351 查看
1. 某p2p网站每天发新标,对于一个标最后投标导致标满的用户,系统会奖励38元红包,所以写啦个爬虫每隔1分钟去爬取合适的标,然后短信提醒
2. 两个要爬取的页面
============投资列表=====================
======标的详情页面如下==============
=============================
3.核心代码逻辑
4.爬取信息
5.后续扩展
(1)该网站各种请求url如上,后续有时间结合如上地址可以搞个自动投标插件,实现自动抢标、投标
6.遇到问题
之前get请求可以投标,但现在他们已经做了限制,不能get或post请求,请求报错信息如下:
如上问题查了很多资料,说清空本地cookie但试啦还是不行,还有说这个是php后台设置,以后有时间再尝试下是否存在csrf攻击……
2. 两个要爬取的页面
============投资列表=====================
======标的详情页面如下==============
=============================
3.核心代码逻辑
public Document getDocument (String url){ try { return Jsoup.connect(url).get(); } catch (Exception e) { e.printStackTrace(); } return null; }
//1.首页抓取未完成的标 CrawUtil ft = new CrawUtil(); Document fDoc = ft.getDocument("http://www.qtyd.com/"); Elements elements=fDoc.select("dd.invset-item"); if(elements.size()<=7){ //标的列表低于7个标 return ; } try { //2.循环判断每个标的情况 for(int i=0;i<=7;i++){ //获取进度 Element elements1=elements.get(i); Elements speed=elements1.select(".item-speed"); Elements speedLine=speed.select(".invest-speed-line"); String iSpeedLine= speedLine.toString(); String speedStr = iSpeedLine.substring(iSpeedLine.lastIndexOf(":")+1,iSpeedLine.lastIndexOf("%")).trim(); //过滤掉满标的 if(Double.parseDouble(speedStr)==100.00){ continue; } //获取收益 String itemApr=elements1.select(".item-apr").text(); // if("12.00%".equals(itemApr.toString())){ // continue; // } //3.获取天数 String itemTime=elements1.select(".item-time").text(); itemTime=itemTime.replace("天","").trim(); // if(Integer.parseInt(itemTime)>50){ // continue; // } //获取标id String itemName=elements1.select(".item-name").toString(); itemName=itemName.substring(itemName.lastIndexOf("invest/")+7,itemName.lastIndexOf(".html")); CrawUtil t = new CrawUtil(); String url=String.format("http://www.qtyd.com/invest/%s.html",Integer.parseInt(itemName)); Document doc = t.getDocument(url); // 获取目标HTML代码 Elements ele1 = doc.select(".ft30"); StringBuffer stringBuffer=new StringBuffer(); stringBuffer.append("监控到有标可以投资:"); // 可投金额 String money = ele1.get(0).text().replace(",",""); // if(Double.parseDouble(money)>50000){ // continue; // } stringBuffer.append("可投金额:" + money); // 年利率 String rank = ele1.get(1).text(); stringBuffer.append("年利率:" + rank); // days String days = ele1.get(2).text(); stringBuffer.append("收益期限" + days + "天"+"\n"); stringBuffer.append("请访问:"+url+"\n"); System.out.print(stringBuffer.toString()); //发短信通知 //SmsUtil.sendSms(stringBuffer.toString(),"18758160514"); } } catch (Exception e) { e.printStackTrace(); }
4.爬取信息
5.后续扩展
(1)该网站各种请求url如上,后续有时间结合如上地址可以搞个自动投标插件,实现自动抢标、投标
6.遇到问题
之前get请求可以投标,但现在他们已经做了限制,不能get或post请求,请求报错信息如下:
如上问题查了很多资料,说清空本地cookie但试啦还是不行,还有说这个是php后台设置,以后有时间再尝试下是否存在csrf攻击……
相关文章推荐
- STM8出现如下问题的解决方案
- 今天搞了一个下午,总算是把并查集了解了一点
- 【自考】 数据结构
- 单例模式
- hdu-multi-university contest 4
- SQL Server中的“最大并行度”的配置建议
- Highcharts只显示点不显示线的问题
- Apache+tomcat ajp模式转发域名
- PHP中的魔术方法总结
- 微信公众账号 点击返回页面刷新页面得到两个相同的code导致程序报错的问题
- SSH框架的pom.xml文件
- Java复习第四天
- 原生sql 查clob字段,查出的结果是string类型
- Android远程服务一:android AIDL远程服务调用
- PHP中的魔术方法总结
- poj1741 Tree 树的点分冶
- python的range()函数用法
- C++中的转型操作符
- ZOJ 2105 Number Sequence(矩阵快速幂)
- 白话空间统计之四:P值和Z得分(中)