在下抓数据也小有研究,现分享几个自己研究出来的抓数据的技术,可能会有很多不足的地方,欢迎大家指正补充哈哈!

方法一:直接抓取网页源码
优点:速度快。
缺点:1,正由于速度快,易被服务器端检测,可能会限制当前ip的抓取。对于这点,可以尝试使用ip代码解决。
2,如果你要抓取的数据,是在网页加载完后,js修改了网页元素,无法抓取。
3,遇到抓取一些大型网站,如果需要抓取如登录后的页面,可能需要破解服务器端帐号加密算法以及各种加密算法,及其考验技术性。
适用场景:网页完全静态化,并且你要抓取的数据在网页首次加载完成就加载出来了。涉及登录或者权限操作的类似页面未做任何帐号加密或只做简单加密的。
当然,如果该网页你抓取的数据,是通过接口获得的json,那么,你就更幸福的,直接抓取json页面即可。
对于有登录的页面,我们如何拿到他的登录页之后的源码呢?
首先我要介绍一下,对于session保存帐号信息的情况下,服务器是如何确定该用户身份的。
首先,用户登录成功后,服务器端会将用户的当前会话信息保存到session中,每一个session有一个唯一标志sessionId。则用户访问这个页面,session被创建后,就会接收到服务器端传回的sessionId,并将其保存到cookie中,因此,我们可以用chrome浏览器打开检查项,查看当前页面的jsessionId。下次用户访问需要登录的页面时,用户发送的请求头会附上这个sessionId,服务器端通过这个sessionId就可以确定用户的身份。
这里,我搭建了一个简单的jsp登录页面,登录后的帐号信息保存在服务器端session中。
思路:1,登录。2,登录成功后获得cookie。3,将cookie放到请求头中,向登录页发送请求。
附上java版本的代码及python
java版:

package craw;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;

public class CrawTest {
//获得网页源代码
private static String getHtml(String urlString,String charset,String cookie){
StringBuffer html = new StringBuffer();
try {
URL url = new URL(urlString);
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
urlConn.setRequestProperty(“Cookie”, cookie);
BufferedReader br = new BufferedReader(new InputStreamReader(urlConn.getInputStream(),charset));

        String str; while((str=br.readLine())!=null){ html.append(str); } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return html.toString();
} //发送post请求,并返回请求后的cookie
private static String postGetCookie(String urlString,String params,String charset){ String cookies=null; try { URL url = new URL(urlString); URLConnection urlConn = url.openConnection(); urlConn.setDoInput(true); urlConn.setDoOutput(true); PrintWriter out = new PrintWriter(urlConn.getOutputStream()); out.print(params); out.flush(); cookies = urlConn.getHeaderFields().get("Set-Cookie").get(0); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return cookies;
} public static void main(String[] args) { String cookie = postGetCookie("http://localhost:8080/loginDemo/login", "username=admin&password=123456","utf-8"); String html = getHtml("http://localhost:8080/loginDemo/index.jsp", "utf-8", cookie); System.out.println(html);//这里我们就可能输出登录后的网页源代码了
}

}

python版:

浅谈数据抓取的几种方法相关推荐

  1. 浅谈Charles抓取HTTPS原理及HTTP CONNECT

    浅谈Charles抓取HTTPS原理 在关于HTTPS,你需要知道的全部中,分析了HTTPS的安全通信过程,知道了HTTPS可以有效防止中间人攻击.但用过抓包工具的人都知道,比如Charles,Fid ...

  2. python 爬虫 数据抓取的三种方式

    python 爬虫   数据抓取的三种方式 常用抽取网页数据的方式有三种:正则表达式.Beautiful Soup.lxml 1.正则表达式 正则表达式有个很大的缺点是难以构造.可读性差.不易适用未来 ...

  3. linux脚本遍历数组,浅谈shell 遍历数组的几种方法

    背景 某天遇到一个问题,现象如下:第一种遍历正常打印元素,然而第二种遍历只会打印一个元素! #!/bin/bash # $1 代表文件目录 # 执行 eg: # sh your_shell.sh /u ...

  4. java分页抓取数据_网页分页数据抓取的几种方式

    相信所有个人网站的站长都有抓取别人数据的经历吧,目前抓取别人网站数据的方式无非两种方式: 一.使用第三方工具,其中最著名的是火车头采集器,在此不做介绍. 二.自己写程序抓取,这种方式要求站长自己写程序 ...

  5. 手机数据抓包的N种方法

    在对移动数据业务进行质量指标分析的过程中,需要在手机终端侧进行抓包分析.由于Android系统是当前的主流系统之一,因而实现在Android系统手机端进行抓包分析对移动数据业务质量指标分析具有重要作用 ...

  6. 外贸网络推广浅谈蜘蛛抓取频次的原则跟哪些有关?

    众所周知,外贸网络推广表示,百度蜘蛛会根据网站设置的协议对站点的页面进行抓取,但也并不是每个站点都能保持同样的抓取频次,也并不会对每个网站都保持喜爱,但想要网站提高排名,让蜘蛛保持优质的抓取频次很重要 ...

  7. 防止email被抓取的两种方法(js和css)

    现在很多无聊人士都用自己的spider在网上到处抓取email, 如果你的页面上写了自己的email,那么不多久就会收到很多垃圾邮件. 有很多方法可以避免被抓取,现在很多人都把@换成#,不过估计很多蜘 ...

  8. 浅谈MySQL数据库备份的几种方法

    mysql常见的备份方式有:mysqldump.mysqlhotcopy.BACKUP TABLE .SELECT INTO OUTFILE,又或者备份二进制日志(binlog),还可以是直接拷贝数据 ...

  9. 浅谈php输出数组的4种方法

    在之前的文章<PHP数组学习之一维数组如何创建和初始化(代码详解)>和<PHP数组学习之二维数组创建方法浅析>中我们通过代码实例介绍了一维数组和二维数组的定义方法,简单易懂. ...

最新文章

  1. echarts实现柱状图分页展示
  2. 进程间通信 - 动态链接库实现
  3. ASP.NET Core启动地址配置方法及优先级顺序 | .NET 6 版本
  4. python3语音识别模块_『开源项目』基于STM32的智能垃圾桶之语音识别
  5. HDU 1867 KMP
  6. Windows 8 系列(六):BackgroundTask 及其引起无法捕获的Crash
  7. 【代码优化】注解优先命名模式
  8. 天翼短信 java_中国电信天翼开放平台自定义短信验证码和模板短信demo
  9. linux罗技键盘驱动下载,罗技m590驱动-罗技m590无线鼠标驱动下载 v8.10.154官方版-下载啦...
  10. Warez FAQ中英对照版
  11. Spring之Bean作用域
  12. 天涯 大神 kkndme 房地产 调控
  13. 青龙面板-快手极速版(每天3块脚本)(废-已不能使用)
  14. 小马激活工具激活系统导致系统崩溃
  15. AMD CPU搞编程能行吗
  16. 基于springboot的茶叶销售商城网站
  17. 抖音运营干货:3个月4抖音号狂吸400W+粉丝
  18. 图形变换核心原理(平移、缩放、旋转,拉伸)
  19. PHP时间戳与日期的相互转换
  20. 基于java/php/python的毕业设计管理系统开题报告

热门文章

  1. js判断两个字符串相等问题
  2. node 开启服务器
  3. java基于sptingboot+vue的校园疫情防控系统 elementui
  4. pn532未发现nfc设备_NFC手机手环脱机模拟加密门禁卡,你get了吗?
  5. MySQL InnoDB Cluster部署
  6. Python编程PTA题解——两数之和
  7. Ubuntu的一些实用软件
  8. JDBC SQl注入
  9. 网络视频服务器与数字硬盘录像机的区别
  10. 手把手教你把网上下载视频刻录成VCD、DVD