- 浏览: 3508181 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (1491)
- Hibernate (28)
- spring (37)
- struts2 (19)
- jsp (12)
- servlet (2)
- mysql (24)
- tomcat (3)
- weblogic (1)
- ajax (36)
- jquery (47)
- html (43)
- JS (32)
- ibatis (0)
- DWR (3)
- EXTJS (43)
- Linux (15)
- Maven (3)
- python (8)
- 其他 (8)
- JAVASE (6)
- java javase string (0)
- JAVA 语法 (3)
- juddiv3 (15)
- Mule (1)
- jquery easyui (2)
- mule esb (1)
- java (644)
- log4j (4)
- weka (12)
- android (257)
- web services (4)
- PHP (1)
- 算法 (18)
- 数据结构 算法 (7)
- 数据挖掘 (4)
- 期刊 (6)
- 面试 (5)
- C++ (1)
- 论文 (10)
- 工作 (1)
- 数据结构 (6)
- JAVA配置 (1)
- JAVA垃圾回收 (2)
- SVM (13)
- web st (1)
- jvm (7)
- weka libsvm (1)
- weka屈伟 (1)
- job (2)
- 排序 算法 面试 (3)
- spss (2)
- 搜索引擎 (6)
- java 爬虫 (6)
- 分布式 (1)
- data ming (1)
- eclipse (6)
- 正则表达式 (1)
- 分词器 (2)
- 张孝祥 (1)
- solr (3)
- nutch (1)
- 爬虫 (4)
- lucene (3)
- 狗日的腾讯 (1)
- 我的收藏网址 (13)
- 网络 (1)
- java 数据结构 (22)
- ACM (7)
- jboss (0)
- 大纸 (10)
- maven2 (0)
- elipse (0)
- SVN使用 (2)
- office (1)
- .net (14)
- extjs4 (2)
- zhaopin (0)
- C (2)
- spring mvc (5)
- JPA (9)
- iphone (3)
- css (3)
- 前端框架 (2)
- jui (1)
- dwz (1)
- joomla (1)
- im (1)
- web (2)
- 1 (0)
- 移动UI (1)
- java (1)
- jsoup (1)
- 管理模板 (2)
- javajava (1)
- kali (7)
- 单片机 (1)
- 嵌入式 (1)
- mybatis (2)
- layui (7)
- asp (12)
- asp.net (1)
- sql (1)
- c# (4)
- andorid (1)
- 地价 (1)
- yihuo (1)
- oracle (1)
最新评论
-
endual:
https://blog.csdn.net/chenxbxh2 ...
IE6 bug -
ice86rain:
你好,ES跑起来了吗?我的在tomcat启动时卡在这里Hibe ...
ES架构技术介绍 -
TopLongMan:
...
java public ,protect,friendly,private的方法权限(转) -
贝塔ZQ:
java实现操作word中的表格内容,用插件实现的话,可以试试 ...
java 读取 doc poi读取word中的表格(转) -
ysj570440569:
Maven多模块spring + springMVC + JP ...
Spring+SpringMVC+JPA
爬虫抓取需要登陆才能被访问的页面 2009年09月03日 星期四 下午 11:47 1. 获取需要登陆才能被访问的页面,HttpClient(扩展HttpWebRequest)来实现 使用 HttpClient client = new HttpClient("[登陆页面地址]?username=aaa&password=bbb", null, true); //最后一个参数true,表示保存返回的Cookies, string html=client.GetString();//发出请求,返回结果字符串; client.url=searchurl; //searchurl为查询页面,在该url后连上对应的查询条件即可完成查询 string html=client.GetString(); 然后可以通过正则表达式,根据指定的字符串模型返回需要的部分 /// <summary> /// 在源字符串中查找前置字符串为left,后置字符串为right的内容 /// </summary> /// <param name="source">源字符串</param> /// <param name="condition">条件字符串,由前置字符串+<%%>+后置字符串组成</param> /// <param name="right">后置字符串</param> /// <param name="index">要返回的结果集合中的子项</param> /// <returns></returns> public static string FindSubString(string source,string condition,int index) { string regexString = condition.Replace("<%%>", @"([\s\S]*?)"); Match m = null; m = Regex.Match(source, regexString); return m.Groups[index].Value; } 获取编码转换后的字符串 HttpClient client=new HttpClient(url); string html=client.GetString(); GetString()函数内部会查找Http Headers, 以及HTML的Meta标签,试图找出获取的内容的编码信息.如果都找不到,它会使用client.DefaultEncoding, 这个属性默认为utf-8, 也可以手动设置. 自动保持Cookie, Referer HttpClient client=new HttpClient(url1, null, true); string html1=client.GetString(); client.Url=url2; string html2=client.GetString(); 这里HttpClient的第三个参数,keepContext设置为真时,HttpClient会自动记录每次交互时服务器对Cookies进行 的操作,同时会以前一次请求的Url为Referer.在这个例子里,获取html2时,会把url1作为Referer, 同时会向服务器传递在获取html1时服务器设置的Cookies. 当然,你也可以在构造HttpClient时直接提供第一次请求要发出的Cookies与Referer: HttpClient client=new HttpClient(url, new WebContext(cookies, referer), true); 或者,在使用过程中随时修改这些信息: client.Context.Cookies=cookies; client.Context.referer=referer; 模拟HTML表单提交 HttpClient client=new HttpClient(url); client.PostingData.Add(fieldName1, filedValue1); client.PostingData.Add(fieldName2, fieldValue2); string html=client.GetString(); 上面的代码相当于提交了一个有两个input的表单. 在PostingData非空,或者附加了要上传的文件时(请看下面的上传和文件), HttpClient会自动把HttpVerb改成POST, 并将相应的信息附加到Request上. 向服务器上传文件 HttpClient client=new HttpClient(url); client.AttachFile(fileName, fieldName); client.AttachFile(byteArray, fileName, fieldName); string html=client.GetString(); 这里面的fieldName相当于<input type="file" name="fieldName" />里的fieldName. fileName当然就是你想要上传的文件路径了. 你也可以直接提供一个byte[] 作为文件内容, 但即使如此,你也必须提供一个文件名,以满足HTTP规范的要求. 不同的返回形式 字符串: string html = client.GetString(); 流: Stream stream = client.GetStream(); 字节数组: byte[] data = client.GetBytes(); 保存到文件: client.SaveAsFile(fileName); 或者,你也可以直接操作HttpWebResponse: HttpWebResponse res = client.GetResponse(); 每调用一次上述任何一个方法,都会导致发出一个HTTP Request, 也就是说,你不能同时得到某个Response的两种返回形式. 另外,调用后它们任意一个之后,你可以通过client.ResponseHeaders来获取服务器返回的HTTP头. 下载资源的指定部分(用于断点续传,多线程下载) HttpClient client=new HttpClient(url); //发出HEAD请求,获取资源长度 int length=client.HeadContentLength(); //只获取后一半内容 client.StartPoint=length/2; byte[] data=client.GetBytes(); HeadContentLength()只会发出HTTP HEAD请求.根据HTTP协议, HEAD与GET的作用等同, 但是,只返回HTTP头,而不返回资源主体内容. 也就是说,用这个方法,你没法获取一个需要通过POST才能得到的资源的长度,如果你确实有这样的需求,建议你可以通过GetResponse(),然后 从ResponseHeader里获取Content-Length. 模拟登录 2、session方式 package com.crawinfo.httpclient; import java.io.IOException; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; public class HttpClientTest { /** * @param args * @throws IOException * @throws HttpException */ public static void main(String[] args) throws HttpException, IOException { HttpClient httpclient=new HttpClient();//创建一个客户端,类似打开一个浏览器 GetMethod getMethod=new GetMethod("受保护的地址"); PostMethod postMethod = new PostMethod("登录url"); NameValuePair[] postData = new NameValuePair[2]; postData[0] = new NameValuePair("loginName", "***"); postData[1] = new NameValuePair("loginPswd", "**"); postMethod.addParameters(postData); int statusCode=httpclient.executeMethod(postMethod);//回车——出拳! statusCode= httpclient.executeMethod(getMethod); System.out.println("response1=" + postMethod.getResponseBodyAsString());//察看拳头命中情况,可以获得的东西还有很多,比如head, cookies等等 System.out.println("response2=" + getMethod.getResponseBodyAsString());//察看拳头命中情况,可以获得的东西还有很多,比如head, cookies等等 getMethod.releaseConnection(); postMethod.releaseConnection();//释放,记得收拳哦 } } 3、cookie方式 package com.crawinfo.rencai; import org.apache.commons.httpclient.Cookie; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpMethod; import org.apache.commons.httpclient.methods.GetMethod; public class CrawTest { static Cookie[] cookies=new Cookie[2]; public static void login() throws Exception { cookies[0] = new Cookie("抓取信息网址", "SessionId", "0", "/", -1, false); cookies[1] = new Cookie("抓取信息网址", "otherproperty", "xxx", "/", -1, false); } public static String getRes(String path)throws Exception{ String res=null; HttpClient client=new HttpClient(); HttpMethod method=new GetMethod(path); client.getState().addCookies(cookies); client.executeMethod(method); if(method.getStatusCode()==200){ res=method.getResponseBodyAsString(); cookies=client.getState().getCookies(); } method.releaseConnection(); return res; } public static void main(String[] args) throws Exception { CrawTest.login(); String info = CrawTest.getRes("抓取信息网址"); System.out.println("info="+info); } }
发表评论
-
snmp
2020-04-13 11:07 397https://www.iteye.com/blog/zhan ... -
snmp
2020-04-10 21:33 526https://blog.csdn.net/qq_333141 ... -
服务器监控软件
2019-12-31 11:07 470[ERROR] org.hyperic.sigar.Sigar ... -
多数据源
2019-12-23 22:09 415https://gitee.com/baomidou/dyna ... -
mybatis多数据源
2019-12-23 18:09 410https://blog.csdn.net/qq_288042 ... -
springboot ueditor
2019-12-17 18:26 349https://blog.csdn.net/u01216982 ... -
java支持多数据源
2019-12-13 15:59 415spxcms是否支持多数据源 ... -
java日志
2019-12-10 12:01 259https://blog.csdn.net/peng_wei_ ... -
spring 多数据源
2019-12-06 09:55 391https://www.jb51.net/article/10 ... -
idea
2019-12-04 17:13 363https://blog.csdn.net/dengachao ... -
手机大屏
2019-11-30 16:02 305http://demo.demohuo.top/modals/ ... -
quarz配置
2019-11-08 11:48 421https://blog.csdn.net/BryantLmm ... -
mysql同步
2019-11-06 12:20 313https://blog.csdn.net/baidu_418 ... -
nginx配置多个服务
2019-11-04 20:35 713https://blog.csdn.net/everljs/a ... -
h5 加壳
2019-11-04 16:05 583https://jingyan.baidu.com/artic ... -
jeui 前端框架
2019-10-22 14:30 1123http://www.jemui.com/demo/ http ... -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/ htt ... -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/ -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/ -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/
相关推荐
比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的。那么我们可以利用Urllib库保存我们登录的Cookie,然后再抓取其他页面,这样就达到了我们的目的。 一、Urllib库简介 Urllib...
人人网资源爬取,Http协议是一个无... 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的,那么我们可以利用Urllib2库保存我们登录的Cookie,然后再抓取其他页面就达到目的了
目前,专业搜索引擎网络爬虫通常采用“最好优先”原则访问WEB,即为快速、有效地获得更多的与主题相关的页面(简称“回报”),每次选择“最有价值”的链接进行访问。由于链接包含于页面之中,而通常具有较高价值...
比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的。那么我们可以利用Urllib2库保存我们登录的Cookie,然后再抓取其他页面就达到目的了。 在此之前呢,我们必须先介绍一个...
对于经常写爬虫的大家都知道,有些页面在登录之前是被禁止抓取的,比如知乎的话题页面就要求用户登录才能访问,而 “登录” 离不开 HTTP 中的 Cookie 技术。 登录原理 Cookie 的原理非常简单,因为 HTTP 是一种无...
豆瓣电影列表抓取,页面分析和展示,适用于python初学着想体验数据爬取,存储,展示等系列代码,本代码使用环境为python3.9+vscode。 一、代码总体分为三部分1、save_movie.py:抓取url存取url;2、read_movie.py:...
最近一直在研究爬虫和Lucene,虽然开始决定选用Heritrix来执行爬虫操作,但是后来发现用它来做还是存在一定的问题,比如需要程序生成相应的XML文件,对于同一个Job,怎样才能保证重复运行该Job时文件夹始终是同一个...
咱们的目标是抓取页面上的新闻链接,这些链接被放在了一系列的ul和li标签里。所以,咱得一个个ul去看,每个ul里面又是一堆li,每个li里面才是咱们要的新闻链接。 找到链接后,咱再次用requests去访问这个链接,把...
有的时候,我们想要抓取一个网站,但是需要先登录才能访问它,如果不输入用户名和密码,我们就会一直停留在登录页面。 那我们该如何抓取呢? 这时,我们可以用cookie模拟登录。 获取cookie 我们以猫耳FM为例,咳咳...
比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的。那么我们可以利用Urllib2库保存我们登录的Cookie,然后再抓取其他页面就达到目的了。 在此之前呢,我们必须先介绍一个...
您所要做的就是将 SharedLibrary 上的配置文件和“Consts”类更改为您自己偏好的值(队列名称、MongoDB 凭据/地址)和 Amazon Web Services 密钥(您需要这些值才能访问您的队列从代码)。 有关更多详细信息,请...